总是在jQuery Ajax的post数据上调用JSON.stringify

或任何其他function来预处理您的数据:)

由于我的服务器端框架,我总是需要在发送数据之前调用JSON.stringify – 不必要的样板,你可以忘记添加。

现在我有:

$.ajax({ [...] data: JSON.stringify({ someData: self.someData }), [...] }); 

我会比较喜欢:

 $.ajax({ [...] data: { someData: self.someData }, [...] }); 

我已经研究过ajaxSetup,但到目前为止找不到解决方案……

更新

由于我需要这个的原因,请参阅以下这个问题 。 我可以在服务器端解决这个问题,但是现在我正在寻找一种方法来解决这个问题。

不,没有内置的方法可以将数据从对象预处理到JSON。 但是,您可以使用ajaxSetupajaxSetup为您执行此操作。

 $.ajaxSetup({ beforeSend: function(jqXHR,options){ if ( options.contentType == "application/json" && typeof options.data != "string" ) { options.data = JSON.stringify(options.data); } } }); 

现在只需确保在需要将json发送到服务器的请求中将contentType设置为application/json ,以便它将被if语句捕获。

这里是一个使用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!) [...] }); 

由于prefilters与dataType选项匹配,因此我们必须在$.ajax请求中手动设置它。 如果dataType与prefilter(“json”)匹配,那么在发送请求之前,它会将data对象转换为字符串,并将contentType标头设置为匹配(“application / json”)。

请记住,这是一个全局变化,将影响所有未来的$.ajax请求与dataType: "json"

这是我使用的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); } }); 

希望这可以帮助。

用户Jquery.getJSON()。您可以直接获取json数据。

 $.getJSON('', function(data) { //you can use data. }); 

http://api.jquery.com/jQuery.getJSON/