phonegapを使用して取り組んでいるプロジェクトで問題が発生しています
[ステップ 1] - ユーザーのログイン「セッション」を Web サーバーからローカル (Web SQL) に保存しています。これは正常に動作しています。Web サーバーに正常に接続し、ユーザーのログイン データを投稿し、サーバーから応答を取得し、ローカル ユーザー データベースを作成し、ユーザーの「セッション」値を保存できます。
[ステップ 2] - 次に、この「セッション」値を Web サーバーに戻し、サーバーから応答データを受信する必要があります。繰り返しますが、これは期待どおりに機能しますが、問題は、コールバック関数が 2 回実行されることです。
ユーザーが画面上のボタンをタップすると、ステップ 2が呼び出されます。 phonegap がタップを複数回拾っているために、ステップ 2が 2 回呼び出される理由はないようです。
$(".yes_sync").live("tap", function(){
console.log("tap!");
...
シングルタップイベントのみを記録します。
ユーザーがタップすると、私は呼び出しています:
var db = window.openDatabase("MVIdb", "1.0", "MVIsqlite", 200000);
db.transaction(getUserId, getUserIdFailed, getUserIdsSuccess);
getUserId、getUserIdFailed、および getUserIdsSuccess 関数は次のようになります。
function getUserId(tx){
tx.executeSql("SELECT * FROM user WHERE id = '1'", [], getUserIdsSuccess, getUserIdFailed);
}
function getUserIdFailed(tx, results){
console.log("Error retrieving user session ID");
}
function getUserIdsSuccess(tx, results){
console.log("Success retrieving user session ID");
if(typeof results != 'undefined'){
var return_value = results.rows.item(0).user_id;
user_session_id = return_value;
var token = $.md5(user_session_id+"whatever!");
$.get('http://localhost/project/dummyserver/sync?user_id=' + user_session_id + '&token=' + token, function(data) {
data = $.parseJSON(data);
for (var key in data){
console.log(data[key]['user_id']);
}
$(".ui-loader").fadeOut();
jQuery.mobile.changePage("_sync_complete.html", { role: "dialog", transition: "pop" } );
});
}
}
ご覧のとおり、成功のコールバックの $.get のコールバックの最後の行で、ポップアップ ダイアログが開きます。このダイアログは 2 回呼び出されています。
phonegap には多くの非同期動作があることに気付きました。これは、システムが「ラグ」を感じるのを防ぐためだと理解していますが、db.transaction でコールバック関数を複数回実行するべきではありませんか?