2013-03-27 31 views
0

我有2個跨域jsonp請求需要在另一個方法可以執行之前完成。所以,我想在$。當()函數如何使用jQuery.when()與多個jsonp請求?

$.when(getX(), getY()).then(createXY); 

的getX()和的getY()使$。阿賈克斯()請求與獨立JSONP回調的兩個不同的領域。

與我原先的想法相反,createXY()在回調返回前被調用。 createXY()因此沒有它需要的數據。

有人請給我提供一個例子,當多個異步jsonp請求完成時調用一個函數嗎?

+0

getX()和getY()返回什麼?他們應該返回'$ .ajax()'返回的值。 – 2013-03-27 00:47:17

+0

當涉及到承諾時避免jQuery [因爲](http://abdulapopoola.com/2014/12/12/the-differences-between-jquery-deferreds-and-the-promisesa-spec/)和[因爲]( http://stackoverflow.com/questions/23951745/is-any-jquery-version-compliant-to-promise-a-specifications)。 更好地使用像[lie](https://github.com/calvinmetcalf/lie)或[es6-promise](https://github.com/jakearchibald/es6-promise)這樣的promise polyfill。 – jaydoubleyou 2015-05-21 07:45:15

回答

0

要使$.when()正常工作,必須傳遞它正在等待的延遲對象。確保您的getX()getY()函數正在返回由各自生成的jQuery ajax調用創建的延遲對象。

如果您需要幫助,請發送代碼getX()getY()

下面是從一jQuery doc for $.when()一個例子:

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2){ 
    /* a1 and a2 are arguments resolved for the 
     page1 and page2 ajax requests, respectively */ 
    var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */ 
    if (/Whip It/.test(jqXHR.responseText)) { 
    alert("First page has 'Whip It' somewhere."); 
    } 
}); 
0

代碼非常愚蠢的錯誤。 getX()和getY()調用$ .ajax(),但從不返回它。用$ return包裝$ .ajax()調用,代碼現在工作正常。感謝你的幫助!