我正在使用phonegap进行的项目遇到问题
[步骤 1] - 我从 Web 服务器本地存储用户登录“会话”(Web SQL)。这工作正常,我可以成功连接到 Web 服务器,发布用户登录数据,从服务器获取响应,创建本地用户数据库并存储用户“会话”值
[步骤 2] - 然后我需要将此“会话”值传递回 Web 服务器,并从服务器接收响应数据。同样,这按预期工作,但问题是,回调函数正在执行两次。
当用户点击屏幕上的一个按钮时调用第2步,如果因为 phonegap 不止一次地拿起水龙头,这似乎不是第 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 回调的最后一行打开了一个弹出对话框。这个对话被调用了两次。
我注意到 phonegap 有很多异步行为,我理解这是为了防止系统感觉“滞后”,但它肯定不应该在 db.transaction 上多次执行回调函数吗?