HTML 5 Web SQL Database Фиксация или откат транзакции при обновлении страницы

Как написано в Руководстве по программированию клиентских хранилищ и автономных приложений Safari ,откат транзакции базы данных HTML 5 Web SQL выполняется путем возврата true в функции обратного вызова, предоставленной как обратный вызов ошибки для транзакции метода executeSql :

Ошибка для каждого запроса -обработка обратного вызова довольно просто. Если обратный вызов возвращает истину, весь транзакция откатывается. Если обратный вызов возвращает false, транзакция продолжается как ни в чем не бывало пошло не так. Таким образом, если вы выполнение необязательного запроса - если сбой этого конкретного запроса не должен приводить к транзакции сбой - вы должны передать обратный вызов что возвращает false. Если отказ запрос должен вызвать весь транзакция не удалась, вы должны пройти в обратном вызове, который возвращает истину.

Например, если у меня есть следующая транзакция (предположим, что в таблице 'users' есть ограничение UNIQUE в поле 'username', а имя пользователя 'test' уже существует - которое я пытаюсь вставить снова, что должно привести к ошибке ограничения):

database.transaction(function(transaction) {
    transaction.executeSql(
        "INSERT INTO users (username) VALUES('test')",
        null,
        dataCallback,
        errorCallback
     );
});

function errorCallback() {
    return true; //this causes the rollback
}

У меня два вопроса:

  1. Если мне нужно включить много операций в транзакцию (например, мне нужно отправить некоторые данные с помощью ajax на сервер и дождаться ответ и т. д.), и пользователь перезагружает страницу до того, как пришел ответ (что означает, что errorCallback не будет вызван), будет ли транзакция завершена или завершится неудачей?

  2. Кто-нибудь знает, как откатить Интернет SQL-транзакция вручную? Например, если я хочу откатить транзакцию на основе результата вызова ajax, как это можно сделать? Следует ли мне выполнить запрос, содержащий ошибку, чтобы убедиться, что вызывается обратный вызов ошибки?

Спасибо.

7
задан Mister Smith 5 March 2013 в 09:14
поделиться