或者为此事预处理数据的任何其他功能:)
由于我的服务器端框架,我总是需要在发送数据之前调用JSON.stringify - 不必要的样板,你可以忘记添加。
现在我有:
$.ajax({
[...]
data: JSON.stringify({ someData: self.someData }),
[...]
});
我更愿意:
$.ajax({
[...]
data: { someData: self.someData },
[...]
});
我已经研究过ajaxSetup,但到目前为止找不到解决方案......
更新
由于我需要这个的原因,请参阅以下this question。我可以在服务器端解决这个问题,但是现在我正在寻找一种方法来解决这个问题。
答案 0 :(得分:28)
不,没有内置方法可以将数据从对象预处理到JSON。但是,您可以使用ajaxSetup
和beforeSend
为您执行此操作。
$.ajaxSetup({
beforeSend: function(jqXHR,options){
if ( options.contentType == "application/json" && typeof options.data != "string" ) {
options.data = JSON.stringify(options.data);
}
}
});
现在只需确保将contentType
设置为application/json
就需要将json发送到服务器的请求,以便它被if语句捕获。
答案 1 :(得分:2)
这是一种使用jQuery.prefilter的替代方法:
$.ajaxPrefilter("json", function(options, originalOptions) {
options.data = JSON.stringify(originalOptions.data || null);
options.contentType = "application/json" // content type of *request*
});
$.ajax({
data: {foo: [1,2,3]},
dataType: "json" // expected content type of *response* (must match prefilter, above!)
[...]
});
由于预过滤器与dataType
选项匹配,因此我们必须在$.ajax
请求中手动设置它。如果dataType
匹配预过滤器(" json"),那么在发送请求之前,它会将data
对象转换为字符串,并设置contentType
标头匹配(" application / json")。
请注意,此次全局更改会影响$.ajax
以后的所有dataType: "json"
次请求!
答案 2 :(得分:0)
这里是我使用的jQuery.prefilter函数(它比beforeSend方法更好),它将匹配任何数据类型,并将序列化post或put请求中的任何对象。
$.ajaxPrefilter(function (options, org) {
var rtype = options.type.toLowerCase();
if ((rtype === "post" || rtype === "put") && org.data !== null && typeof org.data === 'object') {
options.data = JSON.stringify(org.data);
}
});
希望这会有所帮助。
答案 3 :(得分:-3)
User Jquery.getJSON()。您可以直接获取json数据。
$.getJSON('', function(data) {
//you can use data.
});