我对Phonegap有一个奇怪的问题。我的XMLHttpRequests开火了两次;我正在开发的应用程序中使用XMLHttpRequests来创建要选择的动态事件列表。 jQuery也是我正在使用的库之一。
每当我使用XMLHttpRequest(vanilla或jQuery)时,它都会执行两次,即使它只运行一次。还有其他人遇到过这个问题吗?
这里有一些示例代码:
(function(){
var request = new XMLHttpRequest();
request.open("GET", "http://{site-url-hidden-for-privacy}/events/list", true);
request.onreadystatechange = function(){
if(request.readyState == 4){
if(request.status == 200 || request.status == 0){
parse_events(JSON.parse( request.responseText ));
}
}
}
request.send();
})();
XMLHttpResponse文本是一个JSON数组,parse_events只是接受该数组并使用它为菜单创建一组选择选项。
有没有人知道为什么这会引发两次,实际上每个事件都会创建两个选项,而应该只有一个?
答案 0 :(得分:4)
好的,我明白了。我和同事一起在这个项目上工作,我们忘了听设备准备事件,因为我们正在使用phonegap。我们在加载窗口时绑定了“在线”和“离线”事件,而不是在设备准备好时。
在:
document.addEventListener("DOMContentLoaded", function(){
document.addEventListener("online", function(){...}, false);
document.addEventListener("offline", function(){...}, false);
}, false);
解决方案:
document.addEventListener("DOMContentLoaded", function(){
document.addEventListener("deviceready",function(){
document.addEventListener("online", function(){...}, false);
document.addEventListener("offline", function(){...}, false);
},false);
}, false);
我不知道为什么,因为它没有完全意义,但我认为不通过“deviceready”导致HTTP请求两次,一次加载页面,一次设备准备好
修复是让它只在设备准备就绪时才会进入,如上所示。