Phonegap同步ajax调用

时间:2014-04-01 21:10:43

标签: javascript ajax cordova synchronous

我一直在使用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';
}

我查了几篇关于它的帖子

How to wait for ajax request to complete in javascript when synchronous option is not available? 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();
}

如果有人知道如何解决这个问题,我将非常感激!

1 个答案:

答案 0 :(得分:0)

我最终只是在sendRequests()函数的所有退出状态中抛出了notLoading()函数。有点痛,但现在似乎有效。