有人能简单地解释一下如何让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[]: []
,这可能是因为查询字符串的限制。
发布于 2012-10-03 00:02:47
您需要首先使用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。
发布于 2012-10-03 00:05:30
不,dataType
option是用来解析接收到的数据的。
要post 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
,但它没有包含stringifier;您需要另一个polyfill库。
发布于 2016-09-04 03:40:12
虽然我知道像ASP.NET MVC这样的许多架构都有内置的功能,可以将JSON.stringify作为contentType来处理,但我的情况有点不同,所以这可能会在未来对某些人有所帮助。我知道这会为我节省几个小时!
因为我的http请求是由来自IBM (AS400环境)的CGI API在不同的子域上处理的,所以这些请求是跨域的,因此是jsonp。我实际上是通过javascript对象发送ajax的。以下是我的ajax帖子的一个示例:
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
});
https://stackoverflow.com/questions/12693947
复制相似问题