正如Safari 客户端存储和离线应用程序编程指南中所写,回滚 HTML 5 Web SQL 数据库事务是通过在作为事务错误回调方法提供的回调函数中返回 true 来完成的executeSql
:
每个查询的错误处理回调相当简单。如果回调返回 true,则整个事务将回滚。如果回调返回 false,则事务继续进行,就好像没有出错一样。因此,如果您正在执行一个可选的查询——如果该特定查询的失败不应导致事务失败——您应该传入一个返回 false 的回调。如果查询失败导致整个事务失败,则应传入一个返回 true 的回调。
例如,如果我有以下事务(假设 'users' 表在 'username' 字段上有一个 UNIQUE 约束并且用户名 'test' 已经存在 - 我正在尝试再次插入,这将导致约束错误) :
database.transaction(function(transaction) {
transaction.executeSql(
"INSERT INTO users (username) VALUES('test')",
null,
dataCallback,
errorCallback
);
});
function errorCallback() {
return true; //this causes the rollback
}
我有两个问题:
如果我必须在事务中包含许多操作(例如,我必须使用 ajax 将一些数据发送到服务器并等待响应等)并且用户在响应到达之前重新加载页面(这意味着 errorCallback不会被调用),事务会被提交还是会失败?
有谁知道如何手动回滚 Web SQL 事务?例如,如果我想根据 ajax 调用的结果回滚事务,该怎么做?我应该运行包含错误的查询以确保调用错误回调吗?
谢谢。