簡體   English   中英

Phonegap同步ajax調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM