2013-08-15 3 views
1

Я пытаюсь обновить 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; 
       } 
      } 
     } 
} 
+0

1) - вы объявили, но не использовали 'var success = false;' (2) Разве вы не должны «возвращать» значение «ajax.parseJSONP (result)»? Функция, которая не возвращает результат, не может вернуть значение, которое обычно будет считаться истинным. – enhzflep

+0

(1) Это просто артефакт, я удалил его в исходном коде. (2) Я использую функции обратного вызова db.transaction ... – Andreas

+0

А, ладно. Я все еще не думаю, что это с обратными вызовами и результатом «всегда ложный». Что делать, если вы меняете 'success: function (result) { ajax.parseJSONP (результат); }, 'to' success: function (result) { return ajax.parseJSONP (результат); }, '- I. Функции обратного вызова дают parseJSONP это возвращаемое значение. Buuuuut, возвращающее значение отбрасывается, следовательно, указанное выше предложение. – enhzflep

ответ

0

Хорошо, я решил это, используя два обратных вызова, один для parseJSONP и один для успешного обратного вызова. Я думаю, что это верное решение, однако я действительно ненавижу навигацию только обратными вызовами.

Смежные вопросы