1

Phonegapに奇妙な問題があります。私のXMLHttpRequestsは2回起動します。開発中のアプリでXMLHttpRequestsを使用して、選択するイベントの動的リストを作成しています。jQueryも私が使用しているライブラリの1つです。

バニラまたはjQueryのいずれかのXMLHttpRequestを使用するときはいつでも、1回だけ実行する必要がありますが、2回実行します。他の誰かがこの問題に遭遇しましたか?

ここにいくつかのサンプルコード:

(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はその配列を取得し、それを使用してメニューの選択オプションのセットを作成します。

なぜこれが2回発生し、イベントごとに2つのオプションが作成されるのに、1つしかないのか、誰か知っていますか?

4

1 に答える 1

4

わかりました。私は同僚とこのプロジェクトに取り組んでいましたが、phonegap を使用しているため、deviceready イベントが発生するのをリッスンするのを忘れていました。デバイスの準備ができたときではなく、ウィンドウが読み込まれたときに「オンライン」イベントと「オフライン」イベントをバインドしていました。

前:

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 要求が 2 回行われたと思います。

修正は、上記のように、デバイスの準備が整ったときにのみ動作するようにすることでした.

于 2012-11-27T17:49:43.270 に答える