首页 文章

如何使用$ .ajax发送JSON而不是查询字符串?

提问于
浏览
161

有人能够以简单的方式解释如何使jQuery发送实际的JSON而不是查询字符串吗?

$.ajax({
    url      : url,
    dataType : 'json', // I was pretty sure this would do the trick
    data     : data,
    type     : 'POST',
    complete : callback // etc
});

实际上,这会将您精心准备的JSON转换为查询字符串 . 令人讨厌的事情之一是,对象中的任何 array: [] 都将被转换为 array[]: [] ,可能是因为查询sting的限制 .

4 回答

  • 1

    您需要使用JSON.stringify首先将对象序列化为JSON,然后指定 contentType ,以便您的服务器了解它的JSON . 这应该是诀窍:

    $.ajax({
        url: url,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        complete: callback
    });
    

    请注意, JSON 对象在支持JavaScript 1.7 / ECMAScript 5或更高版本的浏览器中原生可用 . 如果您需要旧版支持,可以使用json2 .

  • 233

    不,dataType option用于解析接收的数据 .

    要发布JSON,您需要通过JSON.stringify自行进行字符串化,并将 processData 选项设置为 false .

    $.ajax({
        url: url,
        type: "POST",
        data: JSON.stringify(data),
        processData: false,
        contentType: "application/json; charset=UTF-8",
        complete: callback
    });
    

    请注意,并非所有浏览器都支持 JSON 对象,虽然jQuery具有 .parseJSON ,但它没有包含字符串;你需要另一个polyfill库 .

  • 5

    虽然我知道像ASP.NET MVC这样的许多架构都有内置的功能来处理JSON.stringify作为contentType我的情况有点不同所以这可能会对将来有所帮助 . 我知道这会节省我几个小时!

    由于我的http请求是由来自IBM(AS400环境)的CGI API在不同的子域上处理的,因此这些请求是交叉源,因此是jsonp . 我实际上是通过javascript对象发送我的ajax . 这是我的ajax POST的一个例子:

    var data = {USER : localProfile,  
            INSTANCE : "HTHACKNEY",  
            PAGE : $('select[name="PAGE"]').val(), 
            TITLE : $("input[name='TITLE']").val(), 
            HTML : html,
            STARTDATE : $("input[name='STARTDATE']").val(), 
            ENDDATE : $("input[name='ENDDATE']").val(),
            ARCHIVE : $("input[name='ARCHIVE']").val(), 
            ACTIVE : $("input[name='ACTIVE']").val(), 
            URGENT : $("input[name='URGENT']").val(), 
            AUTHLST :  authStr};
            //console.log(data);
           $.ajax({
                type: "POST",
               url:   "http://www.domian.com/webservicepgm?callback=?",
               data:  data,
               dataType:'jsonp'
           }).
           done(function(data){
             //handle data.WHATEVER
           });
    
  • 26

    如果你要将它发送回asp.net并需要request.form []中的数据,那么你需要将内容类型设置为“application / x-www-form-urlencoded; charset = utf-8”

    原帖here

    其次摆脱数据类型,如果你不期望返回,POST将在失败前等待大约4分钟 . 见here

相关问题