Phonegap中的HTTP请求

我对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只是接受该数组并使用它为菜单创建一组选择选项。

有没有人知道为什么会发生这种情况两次,主要是为每个事件创建两个选项,何时应该只有一个?

好的,我明白了。 我和同事一起在这个项目上工作,因为我们正在使用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请求两次,一次加载页面,一次设备准备好。

解决方法是在设备准备就绪时才进行修复,如上所示。