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
});
Run Code Online (Sandbox Code Playgroud)
实际上,这会将您精心准备的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
});
Run Code Online (Sandbox Code Playgroud)
请注意,该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
});
Run Code Online (Sandbox Code Playgroud)
请注意,并非所有浏览器都支持该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
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257144 次 |
| 最近记录: |