Javascript 如何制作离线AngularJS/Cordova应用程序?

Javascript 如何制作离线AngularJS/Cordova应用程序?,javascript,angularjs,rest,cordova,offline,Javascript,Angularjs,Rest,Cordova,Offline,我有一个AngularJS应用程序(嵌入Cordova应用程序中)。 为了获取和设置数据,它使用RESTAPI(在Django后端服务器上运行) 我需要该应用程序保持工作的几个功能,即使网络关闭。 例如,我期待这种行为: 在线模式 客户端在应用程序中执行某些操作 向API发送POST请求(创建数据) 客户收到“感谢您做了xxx” 回退脱机模式 客户在应用程序上购买东西 客户收到“xxx现在无法完成,但会尽快完成” 无法向服务器发送任何内容,因为我们处于脱机状态。那怎么办呢?有没有办法将AP

我有一个AngularJS应用程序(嵌入Cordova应用程序中)。 为了获取和设置数据,它使用RESTAPI(在Django后端服务器上运行)

我需要该应用程序保持工作的几个功能,即使网络关闭。 例如,我期待这种行为:

在线模式

  • 客户端在应用程序中执行某些操作
  • 向API发送POST请求(创建数据)
  • 客户收到“感谢您做了xxx”
回退脱机模式

  • 客户在应用程序上购买东西
  • 客户收到“xxx现在无法完成,但会尽快完成”
  • 无法向服务器发送任何内容,因为我们处于脱机状态。那怎么办呢?有没有办法将API请求放入一个队列中,当我们回到联机模式时,该队列将被执行
从技术上来说,你会如何设计这个?离线模式似乎有很多不同的技术,这让我有点困惑。欢迎提供任何指导


非常感谢。

我想使用这样的应用程序,那会让我觉得自己很愚蠢。但是有

您可以使用此插件检查网络状态

每个请求都需要在发送HTTP POST和将POST数据保存到本地存储之间进行切换

然后,您只需为以下事件创建回调:

document.addEventListener("offline", onOffline, false);
function onOffline() {
    // Turn on saving to local storage
}

document.addEventListener("online", onOnline, false);
function onOnline() {
    // Read local storage, send all requests
}

我不确定评论中不这样做的压力是什么。我们正在开发的应用程序中有此功能

基本上,我们将iOS应用程序打包为Cordova包装的web容器,并作为应用程序的一部分运行本地代理服务器。它将所有数据通过它传递给web服务。如果请求失败,它将向应用程序返回一个标识符,以便您确定与服务器的连接已断开,然后应用程序将请求保存到localStorage。通过这种方式,用户界面可以适应“离线模式”。在恢复与服务器的连接后,您可以稍后通过代理从应用程序推送数据。应用程序直接连接到代理,而不是Web服务

据我所知,没有一个简单的库可以解决这种情况,而且您必须知道请求将如何影响在线应用程序(如果用户运行缓存到以后的请求,系统中的事情会不同步吗?)


不过,这绝对是可以做到的。

在请求成功返回之前,不要说“谢谢您的购买”,即使是在线!您应该等到您知道购买完成。好吧,这是一个糟糕的例子,但有时我真的不需要在发送数据之前等待服务器响应。@DavidW。真正地你能分享其中一种情况吗?这对我没什么帮助:(我编辑了这个问题,这样我们就可以把注意力集中在真正的问题上,那就是“如何将呼叫排入服务器队列”你不能可靠地说“这将尽快完成,”除非请求已发送并且正在服务器上的队列中等待。我只会尝试请求,如果有任何错误,请告诉用户,“请求此时无法完成,因为(原因)。请稍后重试。”谢谢!这似乎是我应该做的方式:)谢谢这似乎也是一个很好的方法(与lukevp类似,但在脱机时不请求服务器)。