2013-05-20 89 views
2

我正在處理大量的ajax調用,其中大部分都具有相同的參數。我正在考慮使用jquery.ajaxSetup()來減少代碼。可以爲jquery.ajaxSetup()設置範圍嗎?

但是,jQuery不喜歡它的API。它說:

Note: The settings specified here will affect all calls to $.ajax or AJAX-based 
derivatives such as $.get(). This can cause undesirable behavior since other callers (for 
example, plugins) may be expecting the normal default settings. For that reason we 
strongly recommend against using this API. Instead, set the options explicitly in the call 
or define a simple plugin to do so. 

有沒有辦法實現這個,所以它不會觸及每個js文件,包括插件?我現在沒有使用可以與ajax一起工作的外部jQuery插件,但是我希望將來可以爲將來的開發人員提供證明。 jQuery可能會從API中刪除它嗎?

+1

你可以編寫你自己的'$ .ajax()'包裝函數來設置選項嗎?那麼你不需要在你的代碼中的多個地方重複常用的ajax選項,你只需要調用包裝而不是'$ .ajax()'。你可以編寫包裝器來將選項作爲參數,以便它可以有選擇地覆蓋它的默認值。 – nnnnnn

回答

3

如何包裝阿賈克斯()與代碼中調用這樣的:

var sendAjax = function (options) { 
    var type = 'GET'; 
    var dataType = 'json'; 
    var success = options.onsuccess || function() {}; 
    var error = options.onerror || function() {}; 
    var url = options.url; 
    var data = options.data; 
    $.ajax({ 
     type: type, 
     url: url, 
     data: data, 
     dataType: dataType , 
     success: success , 
     error: error 
    }); 
}; 

然後更換你的Ajax調用sendAjax();

+0

完全功能的方法 - 我可以選擇發送一個對象作爲選項,而不是我喜歡你的一般方法,它根本不使用ajaxSetup。謝謝! – streetlight

+0

請注意,這可以通過將默認值定義爲對象而不是單個變量,然後遍歷'options'參數的屬性並將其複製到默認對象中來擴展。 (或者使用['$ .extend()'](http://api.jquery.com/jquery.extend/)來合併它們。)這樣就可以將任意數量的選項傳遞給'sendAjax()'。 – nnnnnn

+0

非常好的提醒! $ .extend在使用選項時會有很大的幫助。 –