javascript - 处理 POST api 和互联网连接丢失的良好做法

标签 javascript angularjs cordova rest http

我拥有一个混合应用程序,其主要语言是 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 成功回调,因为互联网连接丢失会导致“错误”。

如何处理这种情况?
如何避免用户重新提交表单(他会不知道服务器端元素的第一次创建)?

最佳答案

您可以创建一个事务模型:

  1. 客户端为此请求创建一个唯一的事务 ID 并附加到 Rest 调用

  2. 服务器收到请求,检查事务日志是否有相同id的先前调用。

  3. 如果是新交易,服务器会将此交易 ID 存储在状态为“未决”的日志中。服务器然后处理该请求。服务器将事务日志状态更新为“已处理”。服务器然后将响应发送给客户端 并将响应存储在事务日志中

  4. 如果是旧事务,服务器重新发送响应给客户端

  5. 客户端收到响应,客户端向服务器发送交易完成信号。

  6. 服务器将事务日志删除/更新为“已完成”

第5步失败,客户端可以用相同的交易id重新发送请求,没有重复记录的风险

关于javascript - 处理 POST api 和互联网连接丢失的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573778/

相关文章:

javascript - Angular ui-router 防止指令内的状态触发

javascript - 如何在 ngRepeat (AngularJS) 中重复点击处理程序?

javascript - 具有哈希更改的简单 SPA(单页应用程序)实现

javascript - 单击用户图像时显示wordpress用户描述

javascript - 服务器端消息数据安全

javascript - 如何使用 ionic 电容器启用捏缩放?

javascript - 如何检查一个数字是否位于数学级数的两个成员之间?例如A.P.、G.P.或任何其他进展

javascript - AngularJS:在没有范围的字符串中编译 Angular 代码

android - ionic 包 io.ionic.starter 签名错误

android - ant.properties 与 release-signing.properties