Phonegap中的HTTP请求

时间:2012-11-27 13:59:26

标签: javascript jquery ajax cordova

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

有没有人知道为什么这会引发两次,实际上每个事件都会创建两个选项,而应该只有一个?

1 个答案:

答案 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请求两次,一次加载页面,一次设备准备好

修复是让它只在设备准备就绪时才会进入,如上所示。