2011-12-10 92 views
1

我在我的頁面上有幾個ajax調用,我想將它們合併成一個函數。

現在我有這種類型的功能在幾個地方:

function AjaxCallOne() { 

//do something 

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: TheURL, 
    data: "{'TheData':'" + JsonData + "'}", 
    dataType: "json", 
    cache: "false", 
    success:... 
    error:... 
}); 
} 

我想寫那將被用於所有的Ajax調用這樣一個功能:

function MyGeneralAjaxCall(TheData, TheURL, TheSuccessFunction, TheErrorFunction) { 
    $.ajax({ .... }); 
} 

我問題是這樣的:如果我這樣做了,並且用戶幾乎同時發送兩個ajax調用,直到返回第一個調用的返回數據之前第二個ajax調用發生,那麼成功或錯誤函數將觸發正確的呼叫。我擔心,如果用戶在第一次調用返回之前觸發第二次調用,那麼將執行的成功函數將不適用於正確的ajax調用。

謝謝。

+3

您可以使用['.ajaxSetup()'](http://api.jquery.com/jQuery.ajaxSetup/)將參數的默認值設置爲'$ .ajax()'。你不需要一個包裝函數 - 除非由於某種原因你不想破壞「工廠」的默認值。 – millimoose

+0

@Inddial,爲什麼這不是答案?你會得到我的讚賞。 –

+0

@nathangonzalez因爲它不回答OP的實際問題。在做一些可能(或可能不是)不必要的事情的時候,他只是偶然發現了這個問題。 – millimoose

回答

3

您的方法將按預期工作。您傳遞的每個成功函數等都將由每個關聯的AJAX調用單獨使用。 (您的所有參數將保持在一起。)

0

首先,沒有單個全局的Ajax請求回調集。每個ajax調用都獲得它自己的一組回調。

其次:$阿賈克斯({...})MyGeneralAjaxCall ...如果你的想法,你需要一組默認選項,更好的辦法是建立一個

var defaultoptions = { type: "POST", ...} //put default options, mimetypes, etc, here 

(或東西返回),然後需要的地方做:

var myajaxoptions = $.extend({},defaultoptions,myoverrides); 
$.ajax(myajaxoptions); 

這是更可擴展性。沒有必要彌補「中間人」。您的方法可行,但我可以輕鬆看到多個MyGeneralAjaxCall正在創建。如果你可以管理不創建5個或更多的方法,如MyGeneralAjaxCall,我想你會好起來的,但它可能很快就會變得討厭。