2013-10-07 60 views
0

我需要等待一定的Ajax請求才去完成。由於這個請求是由不同的錨點觸發的,因此我將它封裝在一個函數中。 第一個ajax函數完成後會發生什麼,是第二個ajax請求。

起初,我試圖等待第一使用$.ajaxComplete()跑成無端循環,因爲此後進行的第二Ajax請求來完成。

我發現了一些樣品有關使用$.when但他們沒有表明它是否可以使用方法,而不是deferreds。

這是我想做什麼:

$.when(functionFirstAjaxCall(data)).then(function() { 
    // after first ajax request has finished, do the following: 
    $.ajax({ 
     //... 
    }); 
}); 

是否functionFirstAjaxCall()需要有一定的回報值,或者我如何能得到這個人在工作?順便說一句,該解決方案不需要使用$.when

更新:我通過創建自定義事件來解決問題,正如Vandesh所建議的。

function first() { 
    $.ajax({ 
     // ... 
     success: function (d) { 
      $.event.trigger({ 
       type: "finished", 
       data: d 
      }); 
     } 
    }); 
} 

$(document).on('finished', second()); 

無論如何,會有一個簡單的解決方案,使用$.when

+0

用第二個ajax創建一個函數並在'success:function(){...}或者'done:'中運行它,從第一個ajax開始? – Spokey

+0

'success'從JQuery 1.8開始棄用 - http://api.jquery.com/jQuery.ajax/ – Vandesh

回答

2

是的,我們可以使用!給你這樣的工作?

function first() { 
    var a = $.ajax({ 
     // ... 
    }); 
    return a.promise(); 
} 

first().done(function(){ 
    //Im done 
}); 
1

你可以這樣做 -

$.ajax({// First AJAX call 
    url: "" 
}).done(function() { 
    $.ajax({//Second AJAX call on completion of first 
     url: "" 
    }).done(function() { 

    }); 
}); 

找到更多的$.ajax()

+0

不,第一個Ajax會在更多場合被觸發。兩者並不齊頭並進。這就是爲什麼我把它打包成一個函數。我不能'functionFirstAjaxCall()。done(function(){...});'我可以嗎? – Explicat

+2

你可以嘗試使用jQuery事件 - .bind()和.trigger() http://api.jquery.com/category/events/ 編寫你的自定義事件,當你的函數完成並綁定第二個AJAX調用該事件 – Vandesh