Szi*_*rdD 7 javascript database html5 transactions web-sql
至于写在Safari浏览器客户端存储和离线应用程序编程指南,回滚HTML 5的Web SQL数据库事务通过返回的错误回调提供的回调函数做真实交易的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
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
如果我必须在事务中包含许多操作(例如,我必须使用ajax将一些数据发送到服务器并等待响应等),并且用户在响应到达之前重新加载页面(这意味着errorCallback将不会被调用),交易会被提交还是会失败?
有谁知道如何手动回滚Web SQL事务?例如,如果我想根据ajax调用的结果回滚事务,怎么办呢?我应该运行包含错误的查询以确保调用错误回调吗?
谢谢.
abort方法。对于 AJAX,在开始写入事务之前准备好所有数据。正如你所描述的,你不会有任何问题。尽可能使用数据库约束(UNIQUE、FOREIGNKEY)。