有人能够以简单的方式解释如何使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 回答
您需要使用JSON.stringify首先将对象序列化为JSON,然后指定
contentType
,以便您的服务器了解它的JSON . 这应该是诀窍:请注意,
JSON
对象在支持JavaScript 1.7 / ECMAScript 5或更高版本的浏览器中原生可用 . 如果您需要旧版支持,可以使用json2 .不,dataType option用于解析接收的数据 .
要发布JSON,您需要通过JSON.stringify自行进行字符串化,并将
processData
选项设置为false
.请注意,并非所有浏览器都支持
JSON
对象,虽然jQuery具有.parseJSON
,但它没有包含字符串;你需要另一个polyfill库 .虽然我知道像ASP.NET MVC这样的许多架构都有内置的功能来处理JSON.stringify作为contentType我的情况有点不同所以这可能会对将来有所帮助 . 我知道这会节省我几个小时!
由于我的http请求是由来自IBM(AS400环境)的CGI API在不同的子域上处理的,因此这些请求是交叉源,因此是jsonp . 我实际上是通过javascript对象发送我的ajax . 这是我的ajax POST的一个例子:
如果你要将它发送回asp.net并需要request.form []中的数据,那么你需要将内容类型设置为“application / x-www-form-urlencoded; charset = utf-8”
原帖here
其次摆脱数据类型,如果你不期望返回,POST将在失败前等待大约4分钟 . 见here