我拥有一个混合应用程序,其主要语言是 Javascript (AngularJs) 所以。
基本上,我有一个旨在通过我的 REST api(在不同的服务器上)创建对象的表单。
我的 save
函数在概念上是这样的:
$scope.save = function () {
var promise = CRUDService.post($scope.myElementToPost);
promise.then(function (response) {
//when 20X status
}, function () {
//when 40X - 50X status
});
};
假设触发了save
函数,在POST
请求之后,手机立即失去了互联网连接,导致客户端出现错误,因此涉及错误回调。
在这种“异常(exception)”情况下,元素会在服务器的数据库中很好地创建,但不会触发 javascript 成功回调,因为互联网连接丢失会导致“错误”。
如何处理这种情况?
如何避免用户重新提交表单(他会不知道服务器端元素的第一次创建)?
最佳答案
您可以创建一个事务模型:
客户端为此请求创建一个唯一的事务 ID 并附加到 Rest 调用
服务器收到请求,检查事务日志是否有相同id的先前调用。
如果是新交易,服务器会将此交易 ID 存储在状态为“未决”的日志中。服务器然后处理该请求。服务器将事务日志状态更新为“已处理”。服务器然后将响应发送给客户端 并将响应存储在事务日志中
如果是旧事务,服务器重新发送响应给客户端
客户端收到响应,客户端向服务器发送交易完成信号。
服务器将事务日志删除/更新为“已完成”
第5步失败,客户端可以用相同的交易id重新发送请求,没有重复记录的风险
关于javascript - 处理 POST api 和互联网连接丢失的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573778/