Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在服务器上保存更改的对象:Restful服务+;安格拉斯_Javascript_Angularjs - Fatal编程技术网

Javascript 仅在服务器上保存更改的对象:Restful服务+;安格拉斯

Javascript 仅在服务器上保存更改的对象:Restful服务+;安格拉斯,javascript,angularjs,Javascript,Angularjs,我在我的页面上显示一个帖子列表,其中有一个like按钮,用户可以打开或关闭该按钮。 为了限制我的服务器流量,我想: 在同一请求中,相同状态在一次发生更改的所有帖子发送更新 仅发送修改帖子的更新 每N秒更新一次like状态,仅在页面退出时更新。不是每次用户切换like按钮时 angularjs有可能做到这一点吗?我写了一个例子,可以在这里看到: 我花了一些时间对它进行评论,并提供有用的信息,这些信息在页面运行时会显示在页面上。如果您希望在消息移动过快时运行较慢,请更改延迟 从您的问题来看,当

我在我的页面上显示一个帖子列表,其中有一个like按钮,用户可以打开或关闭该按钮。 为了限制我的服务器流量,我想:

  • 在同一请求中,相同状态在一次发生更改的所有帖子发送更新
  • 仅发送修改帖子的更新
  • 每N秒更新一次like状态,仅在页面退出时更新。不是每次用户切换like按钮时

angularjs有可能做到这一点吗?

我写了一个例子,可以在这里看到:

我花了一些时间对它进行评论,并提供有用的信息,这些信息在页面运行时会显示在页面上。如果您希望在消息移动过快时运行较慢,请更改延迟

从您的问题来看,当用户对特定帖子进行任何更改时,您似乎希望保存。您建议每x秒检查一次更改,但这并不理想(尽管使用
setInterval
实现起来很简单)。您还提到了在页面退出时保存更改,但无法保证页面退出时会发生某些事情(例如用户断电)

为了避免上述情况,我会在用户单击“like”按钮时触发ajax调用,但是在第一次单击之后对它们进行限制&在限制计时器运行时存储它们的更改,并在计时器结束后立即推送它们的所有更改

简而言之,以下是我的plunker代码的作用:

  • 用户“喜欢”或“不喜欢”一篇文章,它将使用文章中的新信息向服务器发出Ajax调用。此时,任何新的“喜欢”/“不喜欢”都会被扔进需要更新的帖子“队列”

  • 当第一个Ajax调用成功时,节流计时器启动。在我提供的示例中,它是5秒。对帖子的任何更改(“喜欢”、“不喜欢”)都将被抛出到同一个“队列”中

  • 5秒后,它将检查“队列”。如果为空,则不执行任何操作。如果其中包含项目(例如,已更改的帖子),那么它将进行第二次ajax调用并更新服务器上的帖子


  • 我的例子不能准确反映你正在做什么,但重要的是概念。您可以修改代码,使其在如此长的时间内不受限制,或者在一定时间内仅在x次ajax调用后进行限制,等等。

    当您说“每N秒更新一次类似状态”时,您这样做是为了从服务器获取新信息(以防其他人喜欢某个状态),还是简单地将客户端更改推送到服务器?@Trevor Senior在我的情况下,我只需要将数据推回到服务器。感谢您编写示例!非常有用。我正在仔细看一看。