0
在下面的函数中,如何告诉JS在继续执行sql事务之前等待我的ajax调用的返回。 下面的示例代码目前得到的数据正确,但SQL事务在AJAX之前调用填充执行我employees []
Jquery在executeSQL之前等待JSON对象的返回
我尝试把更迭后的SQL操作,但我得到了以下错误
Uncaught DOMException: Failed to execute 'executeSql' on 'SQLTransaction': SQL execution is disallowed.
这里是代码的一部分
var addSampleData = function (tx, employees) {
var employees = [];
$.ajax({
url: 'my-path-to-my-json-answer',
success: function (value, status) {
employees.push(value);
},
error: function (XMLHttpRequest, textStatus, exception) {
console.log("Connection with the server fail.\n" + textStatus + 'status is: ' + exception);
}
});
var l = employees.length;
var sql = "INSERT OR REPLACE INTO leaderboard " +
"(id, uFname, uLname, uRegion, uCountry, uScore) " +
"VALUES (?,?,?,?,?,?)";
var e;
for (var i = 0; i < l; i = i + 1) {
e = employees[i];
tx.executeSql(sql, [e.id, e.uFname, e.uLname, e.uRegion, e.uCountry, e.uScore],
function() {
console.log('INSERT success');
},
function (tx, error) {
console.log('INSERT error: ' + error.message);
});
}
}
任何建议,以改善该代码是值得欢迎的。
使用'.done'搜索的jQuery的承诺语法 – Viney
触发来自“成功”函数的SQL调用(直接在函数中编码,或者将调用放到另一个运行查询的函数中)。该回调仅在从服务器收到响应后才执行。 Ajax是异步的。从概念上讲,你不能“告诉其他代码等待”,你可以简单地“直到ajax完成才执行它” - 唯一的方法就是通过“成功”回调(或者通过.done(),如果你使用Promise界面)。 – ADyson
除上述内容外:为什么您需要重新定义参数员工?您还应该考虑[this](http://stackoverflow.com/questions/27142680/json-data-insert-sqlit-database-not-working),具体取决于整个应用程序的行为。 – Ceredig