【问题标题】:HTTP Requests in PhonegapPhonegap 中的 HTTP 请求
【发布时间】:2013-10-25 20:17:11
【问题描述】:

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

有谁知道为什么这会触发两次,本质上是为每个事件创建两个选项,而实际上应该只有一个?

【问题讨论】:

  • 您如何验证 onreadystatechange 触发了两次?两个相同的请求分别返回一次,看起来非常相似。
  • 对不起,也许我不是很清楚,但似乎是上面的匿名函数触发了两次,即两个相同的请求每次返回一次。

标签: javascript jquery ajax cordova


【解决方案1】:

好的,我明白了。我正在和一位同事一起做这个项目,我们忘记监听 deviceready 事件,因为我们使用的是 phonegap。我们在加载窗口时绑定了“online”和“offline”事件,而不是在设备准备好时。

之前:

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);

我不知道为什么,因为这并不完全有意义,但我认为不通过“设备就绪”会导致 HTTP 请求执行两次,一次是在页面加载时,一次是在设备准备好时.

修复是让它只在设备准备好时才运行,如上所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2012-05-08
    相关资源
    最近更新 更多