首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用$.ajax发送JSON而不是查询字符串?

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

Stack Overflow用户
提问于 2012-10-03 00:00:46
回答 4查看 279.8K关注 0票数 183

有人能简单地解释一下如何让jQuery发送实际的JSON而不是查询字符串吗?

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-03 00:02:47

您需要首先使用JSON.stringify将对象序列化为JSON,然后指定contentType,以便您的服务器能够理解它的JSON。这应该能起到作用:

代码语言:javascript
复制
$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

请注意,JSON对象在支持JavaScript 1.7 / ECMAScript 5或更高版本的浏览器中本机可用。如果你需要遗留的支持,你可以使用json2

票数 269
EN

Stack Overflow用户

发布于 2012-10-03 00:05:30

不,dataType option是用来解析接收到的数据的。

要post JSON,您需要通过JSON.stringify自己将其字符串具体化,并将processData选项设置为false

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

注意,并不是所有的浏览器都支持JSON对象,尽管jQuery有.parseJSON,但它没有包含stringifier;您需要另一个polyfill库。

票数 31
EN

Stack Overflow用户

发布于 2016-09-04 03:40:12

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

因为我的http请求是由来自IBM (AS400环境)的CGI API在不同的子域上处理的,所以这些请求是跨域的,因此是jsonp。我实际上是通过javascript对象发送ajax的。以下是我的ajax帖子的一个示例:

代码语言:javascript
复制
 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
       });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12693947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档