Red*_*dro 166 javascript jquery json query-string
有人能够以简单的方式解释如何让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的限制.
mek*_*all 247
您需要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.
Ber*_*rgi 26
不,该dataType选项用于解析接收的数据.
要发布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库.
虽然我知道像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
       });
| 归档时间: | 
 | 
| 查看次数: | 257144 次 | 
| 最近记录: |