これは私を夢中にさせています。
デバイスがオフラインのときにローカル ストレージ Web DB を使用してこれらのメッセージを保存し、インターネット接続があるときにこれらのメッセージを送信するメッセージ キューがあります。メッセージを送信した後、テーブルから削除してください。
メッセージを送信するとき、どの行を削除する必要があるかを参照できるように、MessageIDs という配列を保持します。
MessageID の長さをループして各 ID を取得し、DELETE トランザクションを実行します。私の alert() は正しい値を取得しますが、トランザクションが実行されると、値は未定義です。既知の「ID」をトランザクションにハードコーディングしてみましたが、うまくいきました。何かご意見は?
var MessageIDs = new Array();
//In the block of code not shown I populate MessageIDs and send out messages
for(var j=0; j < MessageIDs.length; j++)
{
alert(MessageIDs[j]); //Pulls the right value
site.data.database.transaction(
function (transaction) {
//[MessageIDs[j]] has a value of undefined and thus doesn't get deleted but the transaction doesn't technically fail either
transaction.executeSql("DELETE FROM Messages WHERE id = ?;", [MessageIDs[j]],
site.contact.removeQueuedMessagesSuccess, site.contact.removeQueuedMessagesError);
}
);
}