[英]Phonegap synchronous ajax call
我一直在使用phonegap來構建應用程序,並且一直在使用ajax與服務器進行通信以獲取所有必要的數據。 某些頁面需要花費幾秒鍾的時間來加載(在加載所有內容之前,我不會顯示該頁面),並且我希望在客戶端與服務器通信並處理所有數據時出現加載屏幕。
在我決定將ajax調用放入函數中之前,我的一切工作都很好(我正在與幾個團隊成員一起工作,所以我認為,如果它們在某些不錯的函數中,使用這些ajax調用會更容易)。 現在,由於ajax函數是異步的,因此在完成請求之前,打開和關閉加載屏幕。 我希望我的函數停止執行代碼(類似於警報),以便在進行所有ajax調用后關閉加載屏幕。
本質上,我希望我的JavaScript代碼如下所示:
loading();
sendRequests();
notLoading();
其中loading()顯示加載屏幕,而notLoading()關閉加載屏幕。 我的sendRequests()函數特定於每個頁面(每個頁面必須根據頁面的功能發送不同的請求)
如果你們想知道loading()和notLoading()函數的樣子,那么您就可以
// functions to make loading screen appear and disappear
function loading() {
document.getElementById("blackout").style.display = 'block';
}
function notLoading() {
document.getElementById("blackout").style.display = 'none';
}
我看過其他有關它的文章
當同步選項不可用時,如何等待ajax請求在javascript中完成? http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX
這兩個鏈接從本質上告訴您相同的信息,request.open()中的第三個參數需要設置為false ...好吧,我已經嘗試過了,但是它不起作用= /
這是我的getRequest()函數的示例,因此每個人都可以看到我正在嘗試執行的操作:
// will send a GET request to the parameter url
function getRequest(url) {
var req = new XMLHttpRequest();
req.open('GET', url, false);
setHeaders(req);
req.onreadystatechange = function() {
if (req.readyState == 4) {
if( (req.status == 200) || (req.status == 0) ) {
if( (typeof req.responseText != "undefined") && (req.responseText != "") ) {
localStorage["request"] = req.responseText;
}
else {
alert("GR: Error talking to the server");
}
}
else {
alert("GR: Error talking to server");
}
}
}
req.send(null);
return parseJSON();
}
如果有人知道我該如何解決,我將不勝感激!
我最終只是在sendRequests()函數的所有退出狀態下拋出了notLoading()函數。 有點痛苦,但現在似乎可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.