我一直在使用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();
}
如果有人知道如何解决这个问题,我将非常感激!
答案 0 :(得分:0)
我最终只是在sendRequests()函数的所有退出状态中抛出了notLoading()函数。有点痛,但现在似乎有效。