【发布时间】:2011-07-05 19:20:11
【问题描述】:
如Safari Client-Side Storage and Offline Applications Programming Guide 中所写,回滚 HTML 5 Web SQL 数据库事务是通过在作为错误回调提供给 executeSql 方法的 事务 的回调函数中返回 true 来完成的:
每个查询的错误处理回调 相当简单。如果 回调返回true,整个 事务被回滚。如果 回调返回 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 调用的结果回滚事务,该怎么做?我应该运行包含错误的查询以确保调用错误回调吗?
谢谢。
【问题讨论】:
标签: javascript database html transactions web-sql