2013-10-01 1 views
2

Эта функция выполняет два последовательных вызова AJAX, а данные, возвращаемые страницей 1, используются в запросе на стр. 2.Возвратите обещание от последовательных вызовов jQuery ajax?

function call() { 
    return $.ajax("http://example.com/page1").done(function(d) { 
     $.ajax("http://example.com/page2", { data: d.foo }); 
    }); 
} 

Я хотел call() вернуть обещание, устраняющее только один раз page2 завершил загрузку, а не когда page1 закончил, как это делает в данный момент, так что это можно сделать:

call().done(function() { console.log("page2 has loaded.") }); 

Каков наилучший способ сделать это?

+0

Метод цепочки является лучшим. –

+0

Вы проверили jquery отложенные: http://api.jquery.com/deferred.promise/ – diEcho

ответ

3

call() требуется только очень легкая модификация.

Изменить done на then и вернуть внутреннее $.ajax().

function call() { 
    return $.ajax("http://example.com/page1").then(function(d) { 
     return $.ajax("http://example.com/page2", { data: d.foo }); 
    }); 
}