0

jquery.mobile-1.1.1.min.js と cordova-2.0.0.js (phonegap) を使用しています。

私の $.ajax 呼び出しのセットアップでは、次のようにパラメーターを設定しました。

  success: onFetchOK,   // saves everything to the database
  complete: function(jqXHR, textStatus) {
      // show everything in the database
      showAllHeaders();
  },
  error: function(xhr, textStatus, errorThrown) {
      alert("onFetchFailure: There was an error retrieving messages: \n"
            +"xhr: " + xhr.statusText 
            +"\nstatus: " +textStatus 
            +"\nerror: " +errorThrown.message);
      $('#fetch-result').html(textStatus);
  },

関数 onFetchOK はサーバーから 18 個のメッセージ ヘッダーを取得します。各メッセージ ヘッダーには件名と日付/時刻が含まれ、これらは phonegap webdb ストレージ API を使用して webdb に保存されます。

メッセージ テーブルをドロップして再作成し、アプリを新たに実行すると、受信した 18 個のメッセージごとに complete: 関数が 1 回呼び出されるため、342 個のメッセージ ヘッダーが表示されます (18x18+18)。

これ以外のコードのどこにも完全なものはありません:dos showAllHeaders(); 呼ばれる。

showAllHeaders() 内にアラートを配置すると、そのアラートが 18 回トリガーされます。

これをさらに絞り込むために、成功の中にループカウンターを配置しました: onFetchOK() 次のように:

var loopCount = 0;
// process each message
$.each(json.messages, function(index, msg)
{        
    // save each alert before displaying it
    webdb.addAlert(msg.msg_id, msg.title, msg.when);
    loopCount++;
});
alert("loopCount = " +loopCount);

このアラートが呼び出されると、「loopCount = 18」が表示され、これは 1 回だけ呼び出されます。

アプリを終了してリロードすると、サーバーから新しいメッセージが取得されず、18 個のメッセージ ヘッダーが表示されます。これは本来あるべき姿です。

したがって、私の complete: function() が繰り返し呼び出されているようです...必要に応じて1回、さらに18回。

これがなぜなのか誰にも分かりますか?

4

1 に答える 1

0

実際のコードなしで助けるのは難しいですが、あなたが試してみるべきことがいくつかあります...

  • 関数にアラートを追加しcomplete: function(jqXHR, textStatus) {ます。これは、関数が18回呼び出されたのか、それとも単に呼び出され
    たのかを確認するのに役立ちます。completeshowAllHeaders()
  • Firefox経由でページにアクセスし、Firebug画面に移動し、[ネット]タブに立って、XHRを選択します。XHRの
    下に、返されたデータを含むすべてのサーバー応答を表示できます。
    返されたデータが期待どおりであることを確認しました
  • showAllHeaders()関数に次の行を追加します

{throw new Error( "dummy");を試してください。} catch(e){alert(e.stack); }

この行は、呼び出しスタックを出力し、この関数がどこから呼び出されたかを示します

于 2012-09-01T12:03:52.910 に答える