$ .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参数设置为字符串,而使用getdata对象与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 }); }; });