2011-10-18 60 views
2

我想設置一個全球性的數據參數爲我所有的Ajax請求

$.ajaxSetup({ 
    data: {hash : "12345"} 
}); 

設置此之後我打電話:

var myData = { 
    name : "John", 
    age : "28" 
} 

$.get(url, myData, function(data){ 
    ... 
}); 

能正常工作並添加所有3個參數(散列,名稱,年齡)來請求數據 ,但是當我調用加載函數而不是獲取,它不工作,我只得到2個參數(名稱,年齡):

$("#my_div").load(url, myData, function(data){ 
    ... 
}); 

請誰能告訴我爲什麼它不適用於加載功能?我在我的應用程序有很多用法的負載功能,我不想更改負載得到

謝謝你的每一個提示!

回答

4

這可能被認爲是jQuery中的一個bug;或者至少,他們應該接受他們的AJAX方法之間的接口是不一致的。

解決這個問題的唯一方法是通過使用jQuery.extend與您所提供data合併默認data

jQuery.extend(myData, jQuery.ajaxSettings); 

之前提出請求。

如何其一個錯誤:

loadconvertsdata對象到字符串中之前傳遞到底層jQuery.ajax方法,其中作爲getdoesn't

正因爲如此,當ajaxExtend構建data目的,在load方案中data參數設置爲字符串,而用getdata目的是合併jQuery.ajaxSettings

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 
     }); 
    }; 
});