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

2020/10/23 07:01 · javascript ·  · 0评论

有人可以用一种简单的方式解释如何使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[]: [],这可能是由于查询字符串的限制所致。

您需要使用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

否,该dataType选项用于解析接收到的数据。

要发布JSON,您需要自己通过对其进行字符串化并将选项JSON.stringify设置processDatafalse

$.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
       });

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

原始帖子在这里

其次,摆脱数据类型,如果您不希望返回数据,则POST将等待大约4分钟后才会失败。这里

本文地址:http://javascript.askforanswer.com/ruheshiyong-ajaxfasongjsonerbushichaxunzifuchuan.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!