2012-10-01 60 views
1

,直到每當我試圖找到這個問題大家的答案是指AJAX的啓動/停止等需要等待的XMLHttpRequest完成

我使用跨域調用XUI JS's XHR功能,現在我想正是這樣

callMyXHRfunction(); 
callNextFunctionWhenAboveFunctionResponded(); 

即我應該向前移動,直到除非我的XHR功能響應(成功或失敗)

更新

使用案例:

有一個名爲getAllData()的函數,該函數獲取我提交給服務器的所有當前數據。我需要經常調用這個函數來獲取最新的數據並繼續前進。雖然loggin我調用這個函數來獲取最新的數據,每10分鐘後我需要調用它來獲取數據刷新。

所以,如果我叫我的每一個成功的功能函數,那麼我的代碼可能會混淆其他開發商,如果我寫的像上面他/她會很容易地知道什麼是在第一線和第二線回事。

希望現在大家都理解我的處境非常好。

回答

1

見第三個例子你引用的網站上:

x$(selector).xhr(url, fn); 

第二個參數可以是一個回調,回調是你可能尋找與開始的關鍵字。

另外,使用通過提供async: false作爲一個選項同步調用。

x$("body").xhr("http://the-url",{ async: false }); 

控制流將暫停,直至請求返回,然後才與你的下一個功能繼續。請參閱http://jsfiddle.net/ZQ9uw/以供參考。

+0

是,在這種情況下,我需要調用callNextFunctionWhenAboveFunctionResponded()的回調函數,我不想說,因爲我需要調用許多callMyXHRfunction()案件和每個回調有不同的作用,希望你明白我的意思 –

+1

其實我沒有得到。如果您必須響應每個跨域調用,並且成功執行不同的函數,則無法指定爲每個成功的XHR調用調用單獨的函數。也許這會有助於查看更多的兩個調用*()函數的內容,以便我們更好地理解您的問題。 –

+0

添加了一個用例,請檢查並讓我知道如果您仍然有任何疑問 –

0

你需要做的.xhr呼叫,指定一個回調函數的方式,並通過在你的「下一個」函數作爲回調。

所以你會寫這樣的:

callMyXHRFunction(nextFunctionToCall); // no parens after nextFunctionToCall! 

function callMyXHRFunction(callback) { 
    $("something").xhr(url, { 
     error: callback, // so that nextFunctionToCall is called on error 
     callback: callback, // so that nextFunctionToCall is called on success 
     async: true 
     // add more options here 
    }); 
} 
+0

是的,現在我只是以這種方式做事,傳遞參數操縱等等,有沒有什麼辦法可以完全像我上面提到的那樣,我只是想等到有任何迴應,然後移動,而不是像移動流向另一個方向 –

+0

你可能要找的是同步呼叫。我相應地更新了我的答案。 –

+0

@Ravi:有,但國際海事組織這是非常糟糕的做法,我不會被寫死這樣的代碼。 – Jon