Нашли ли вы способ совершать AJAX-звонки во время транзакции?Я еще не закончил читать всю спецификацию, но до сих пор похоже, что как только ваш SQLTransactionCallback
или SQLTransactionSyncCallback
вернется, вы не сможете добавить больше материала к транзакции - или нет?Может быть из обратного вызова результатов?
Редактировать: Теперь, когда я снова посмотрю, спецификация (которая содержит намного меньше ошибок, чем документ Apple, с которым вы связаны, но не так легко читается) говорит это :
- Если метод [
executeSql
] не был вызван во время выполнения SQLTransactionCallback
, SQLStatementCallback
или SQLStatementErrorCallback
, то вызвать исключение INVALID_STATE_ERR
.
Так что я думаю, что это означает, что нет никакого способа сделать это.
Дальнейшее редактирование: Нет, подождите!Пока SQLStatementCallback
требуется некоторое время для вызова, вы можете быть заняты - ждать, делая select 3 + 4
снова и снова, каждый раз от обратного вызова оператора предыдущего select 3 + 4
, до вашего AJAXВызов устанавливает флаг где-то, что имеет данные, которые вы хотите.Это ужасное программирование (оно потребляет много ресурсов ЦП без веской причины, может блокировать задачи с более низким приоритетом, такие как повторное отображение страницы), но я думаю, что это, вероятно, единственный способ сохранить транзакцию открытой в течение произвольного периода времени.Жаль, что вы не можете select 3 + 4, sleep(1)
в SQLite.
В общем, SQLite (базовый механизм хранения здесь) откатывает незавершенные транзакции.Я еще не проверял случай ошибки при перезагрузке страницы, о котором вы спрашиваете.Я был бы очень удивлен, если бы оно было совершено.
Кстати, большое спасибо за размещение этого вопроса.Я пытался выяснить, как заставить транзакцию откатиться, хотя она тщательно документирована в оригинальной спецификации.