当发出多个 ajax 请求时,是不是有一种“好的模式”来跟踪响应与哪些数据一致?

Posted

技术标签:

【中文标题】当发出多个 ajax 请求时,是不是有一种“好的模式”来跟踪响应与哪些数据一致?【英文标题】:When making multiple ajax requests, is there a "good pattern" for tracking which data the responses line up with?当发出多个 ajax 请求时,是否有一种“好的模式”来跟踪响应与哪些数据一致? 【发布时间】:2015-07-29 01:13:32 【问题描述】:

我构建了很多客户端 js 应用程序,并且主要使用 Backbone。当此类 ajax 操作完成时,Backbone 始终希望您的 api 返回创建/更改/删除模型的副本,使其能够轻松确定刚刚更新的“模型”。

我正在一个新场景(新框架,新构建的 API)中工作,在这个场景中,我从 API 中得到的只是成功/错误状态代码。整个“返回整个模型”似乎是一根拐杖……但我越是努力跟踪这些异步操作,就越觉得这是必要的。

是否有某种约定(也许在 Backbone 世界之外)可以更轻松地处理这种事情?

编辑:我可能想指出我正在使用 FLUX,因此单向流阻止了我在调度程序的任一侧交叉连接所有东西。

【问题讨论】:

一个想法:我所有的 api 调用都是由操作触发的,但包装在承诺中。我可以捕获这些承诺并通过调度程序将它们传递给商店,然后商店可以附加一些数据感知的后期操作。但这会被认为是“不良通量”吗? 没有更多代码,你的问题很难回答。在请求周围使用 javascript 闭包应该足够了,以便您可以进行必要的数据跟踪。如果您新构建的 API 不包含其他东西作为跟踪令牌(您可以随每个请求一起发送),我看不出您还能如何完成此操作。 很抱歉。我想我认为可能有一些方法可以解决这个主题,而不是针对我的代码的解决方案。 【参考方案1】:

你的问题标题比描述更清楚,所以我会继续。

如果您在跟踪多个 ajax 请求结果时遇到困难,您应该使用 Promises。

例如,使用Q library,您可以执行以下操作:

Q.all([AjaxModel1(), AjaxModel2(), AjaxModel3()])
.spread(function(resultModel1, resultModel2, resultModel3) 

);

如果您需要知道每次更改模型时如何获取模型,那么我需要有关您的框架/服务器/代码的更多详细信息。

【讨论】:

我想我正在寻找一种适用于当前 api 响应的解决方案(只是状态代码)。 好的!但是你到底想完成什么? 如果你没有返回任何特定的状态码,我认为没有办法知道它属于什么请求。 感谢您的帮助。我想我没有意识到我的问题有多模糊。但是,这些 cmets 确实有帮助。

以上是关于当发出多个 ajax 请求时,是不是有一种“好的模式”来跟踪响应与哪些数据一致?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery对ajax的封装部分详解和案例

jquery ajax请求时如果页面卡主 多次发出相同请求 如何处理

JSON 参数自动。当 ajax 请求向 MVC 操作方法发出时转换为小写?

如何在laravel 5.2中控制多个ajax请求

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

多个 Ajax 请求共享一个数据库连接 (C#)