Я пытаюсь обновить SQLite с некоторыми данными JSON, полученными через AJAX. Это мой прогресс. Проблема в том, что эта функция всегда возвращает false. Я знаю, что это происходит из-за второго асинхронного выполнения db.transaction. Как я могу это решить? Спасибо заранее!Обновление SQLite с данными AJAX: как обрабатывать два асинхронных вызова
function updateDb(url) {
$.ajax({url: url,
type: "get",
dataType: "jsonp",
async: true,
success: function (result) {
ajax.parseJSONP(result);
},
error: function (request,error) {
console.error('Network error while fetching IR JSON!');
}
});
var ajax = {
parseJSONP:function(result){
var db = window.openDatabase("Test", "1.0", "Test DB", 100000);
db.transaction(populateDB, errorCB, successCB);
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS testtable;');
tx.executeSql('CREATE TABLE IF NOT EXISTS testtable (id NUMERIC PRIMARY KEY, testtext TEXT)');
$.each(result, function(i, row) {
tx.executeSql('INSERT INTO testtable (id, testtext) VALUES (' + row[0] + ',\'' + row[1] + '\';');
});
}
function errorCB(err) {
console.error("Error processing SQL: "+err.message);
return false;
}
function successCB() {
console.info("Updating DB successful!");
return true;
}
}
}
}
1) - вы объявили, но не использовали 'var success = false;' (2) Разве вы не должны «возвращать» значение «ajax.parseJSONP (result)»? Функция, которая не возвращает результат, не может вернуть значение, которое обычно будет считаться истинным. – enhzflep
(1) Это просто артефакт, я удалил его в исходном коде. (2) Я использую функции обратного вызова db.transaction ... – Andreas
А, ладно. Я все еще не думаю, что это с обратными вызовами и результатом «всегда ложный». Что делать, если вы меняете 'success: function (result) { ajax.parseJSONP (результат); }, 'to' success: function (result) { return ajax.parseJSONP (результат); }, '- I. Функции обратного вызова дают parseJSONP это возвращаемое значение. Buuuuut, возвращающее значение отбрасывается, следовательно, указанное выше предложение. – enhzflep