我想为我的所有ajax请求设置一个全局数据参数
$.ajaxSetup({
data: {hash : "12345"}
});
设置完之后我打电话:
var myData = {
name : "John",
age : "28"
}
$.get(url, myData, function(data){
...
});
这很好用,并添加所有3个参数(哈希,名称,年龄)来请求数据 但是当我调用load函数而不是get时,它不起作用,我只得到2个参数(名称,年龄):
$("#my_div").load(url, myData, function(data){
...
});
请有人告诉我为什么它对加载功能不起作用?我在我的应用程序中有很多用于加载功能的用法,我不想在get
上更改负载谢谢你的每一个提示!
答案 0 :(得分:4)
这可能被认为是jQuery中的一个错误;或者至少,他们应该接受他们的AJAX方法之间的接口是不一致的。
解决此问题的唯一方法是使用jQuery.extend
将默认data
与您提供的data
合并:
jQuery.extend(myData, jQuery.ajaxSettings);
在提出请求之前。
它的错误:
load
converts将data
对象转换为字符串,然后传入基础jQuery.ajax
方法,其中为get
doesn't
因此,当ajaxExtend
构建data
对象时,load
方案中data
参数设置为字符串,而get
data
对象合并与jQuery.ajaxSettings
。
答案 1 :(得分:0)
如果您查看.load
,即使您将对象传递给.ajax
,也会看到它没有将对象传递给.load
:
if ( params ) {
...
} else if ( typeof params === "object" ) {
// it will execute this
params = jQuery.param( params, jQuery.ajaxSettings.traditional );
它将调用jQuery.params
,它返回字符串,并且该对象无法与字符串合并。因此,它将发送"name=John&age=28"
而不组合散列对象。
$.get
不是这种情况,因为该函数直接传递对象:
jQuery.each( [ "get", "post" ], function( i, method ) {
jQuery[ method ] = function( url, data, callback, type ) {
...
return jQuery.ajax({
type: method,
url: url,
data: data, // passed directly to $.ajax which takes care of merging $.ajaxSetup stuff
success: callback,
dataType: type
});
};
});