$ .ajaxSetup全局数据未在加载函数中合并
我想为我的所有ajax请求设置一个全局数据参数
$.ajaxSetup({ data: {hash : "12345"} });
设置完之后我打电话给:
var myData = { name : "John", age : "28" } $.get(url, myData, function(data){ ... });
这工作正常并添加所有3个参数(哈希,名称,年龄)来请求数据但是当我调用加载函数而不是get时,它不起作用,我只得到2个参数(名称,年龄):
$("#my_div").load(url, myData, function(data){ ... });
请有人能告诉我为什么它对加载function不起作用? 我的应用程序中有很多加载函数的用法,我不想改变加载的负载
谢谢你的每一个提示!
这可能被认为是jQuery中的一个错误; 或者至少,他们应该接受他们的AJAX方法之间的接口是不一致的。
解决这个问题的唯一方法是使用jQuery.extend
将默认data
与您提供的data
合并:
jQuery.extend(myData, jQuery.ajaxSettings);
在提出请求之前。
怎么一个bug:
load
在传入底层的jQuery.ajax
方法之前将data
对象转换为字符串,而get
则没有 。
因此,当ajaxExtend
构建data
对象时,在load
方案中, data
参数设置为字符串,而使用get
, data
对象与jQuery.ajaxSettings
合并 。
如果你看看.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 }); }; });