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回。
これがなぜなのか誰にも分かりますか?