2011-09-26 20 views
3

我有兩個ajax $.get()請求我需要同步。如何在AJAX完成時發出信號

本質

var signal1 = false; 
var signal2 = false; 

    $.get(url, 
       {}, 
       function (data) { 
        signal1 = true;//callback complete. 
       },'json'); 

    $.get(url2, 
       {}, 
       function (data) { 
        signal2 = true;//callback complete. 
       },'json'); 

    when(signal1 && signal2 == true) 
     $.get(url3... 

我如何,我應該完成這個類型的任務? (獎金,失敗回調的AJAX簽名是什麼?)

回答

3

你不喜歡這樣:

$.when(
    $.get(url, {}, function(data) { 
     // signal 1 complete 
    }, 'json'), 
    $.get(url2, {}, function(data) { 
     // signal 2 complete 
    }, 'json') 
).then(function() { 
    // success after both methods finish 
}, function() { 
    // failure method 
}); 

jQuery.whenhttp://api.jquery.com/jQuery.when/

+0

這兩個答案都很棒。你得到答案的信用,因爲你也淘汰了獎金問題。 –

+0

請注意,'.then(success_func).fail(failure_func)'的替代方法就是'.then(sucess_func,failure_func)'。他們都工作。儘管如此,我更願意用'fail'方法明確地闡明它。 –

+0

有些東西無法正常工作。我注意到這裏的回調是在'$ .get()'中定義的。這其實很好,我認爲更好......但合法嗎?我在網上找到的代碼定義了'then()'中的回調。 –

4

看看jQuery的推遲/承諾方法,他們正是你想要做的。

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2){ 
    // a1 and a2 are the results of your two calls. 
}); 

http://api.jquery.com/jQuery.when/

http://api.jquery.com/deferred.promise/

+0

你如何定義這個語法返回類型? (html/json) –

+0

您可以使用特定方法($ .get/$。getJSON)或將調用擴展爲$ .ajax來指定。你是這個意思嗎? – BNL

相關問題