总是在jQuery Ajax的post数据上调用JSON.stringify
或任何其他function来预处理您的数据:)
由于我的服务器端框架,我总是需要在发送数据之前调用JSON.stringify – 不必要的样板,你可以忘记添加。
现在我有:
$.ajax({ [...] data: JSON.stringify({ someData: self.someData }), [...] });
我会比较喜欢:
$.ajax({ [...] data: { someData: self.someData }, [...] });
我已经研究过ajaxSetup,但到目前为止找不到解决方案……
更新
由于我需要这个的原因,请参阅以下这个问题 。 我可以在服务器端解决这个问题,但是现在我正在寻找一种方法来解决这个问题。
不,没有内置的方法可以将数据从对象预处理到JSON。 但是,您可以使用ajaxSetup
和ajaxSetup
为您执行此操作。
$.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. });