假设我有一个来自jQuery的Ajax调用,例如:
$.ajax({
url: myUrl,
data: myData,
type:'post'
});
我希望能够使用代码向myData添加数据。$.ajaxSetup({
beforeSend: function(call){...}
});
结果应该是所有的ajax调用(包括post和get)都被修改,所以如果我得到了额外的参数IsAjax=true
假设我有一个来自jQuery的Ajax调用,例如:
$.ajax({
url: myUrl,
data: myData,
type:'post'
});
我希望能够使用代码向myData添加数据。$.ajaxSetup({
beforeSend: function(call){...}
});
结果应该是所有的ajax调用(包括post和get)都被修改,所以如果我得到了额外的参数IsAjax=true
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
settings.data = $.extend(settings.data, {isAjax: true});
return true;
}
});
==== 更新 ====
当
data
是一个对象时,除非将processData
选项设置为false
,否则 jQuery 将从对象的键/值对生成数据字符串。例如,{ a: "bc", d: "e,f" }
被转换为字符串"a=bc&d=e%2Cf"
。如果值是一个数组,jQuery 根据traditional
设置的值(下面有描述)序列化具有相同键的多个值。例如,{ a: [1,2] }
在默认的traditional: false
设置下变成字符串"a%5B%5D=1&a%5B%5D=2"
。
https://api.jquery.com/jquery.ajax/
正如你所看到的,processData 设置应该设为 false。所以可以在 $.ajax()
请求中或全局地在 $.ajaxSetup()
中进行设置。
settings.data
在这个时候已经被序列化了。我刚刚测试过了。 - mpenprocessData: false
将在 beforeSend
函数中保留数据对象。因此,您可以使用 $.extend(settings.data, {isAjax: true})
或类似的方法。 - verybadbug这篇博客文章解释了如何使用$.ajaxSetup
添加数据。它的累加方式类似于$.extend
。
只需要这样做:
$.ajaxSetup({
data:{
isAjax:true
}
});
$.ajax({
beforeSend: function(xhr){
this.data += '&' + $.param({
param: 'test'
});
}
});