Rails异步ajax请求多次呈现

时间:2014-01-29 05:04:57

标签: jquery ruby-on-rails ajax ujs

我正在使用rails来对ajax调用进行脚本响应。我点击一个按钮,调用ajax,然后呈现一组项目作为响应并添加到页面中。

如果我快速点击按钮(比如说10次),将会呈现10个响应集。但是,在我的日志中,我只会看到6个帖子(或7个,具体取决于我点击的速度),相同数量的数据库条目以及相同数量的响应。在Chrome中,我在网络工具标签上也只有6个帖子。

如果我将jquery调用设置为async:false(我明白这很糟糕?),我似乎没有问题。

如果有所作为,我在开发中使用Unicorn。

谁能告诉我这里发生了什么(以及我如何解决)?如果没有回复,帖子回复如何呈现?这是UJS竞争条件吗?

1 个答案:

答案 0 :(得分:0)

在我阅读时,我怀疑情况会如此;你的async: false实验似乎证实了这一点(它是否是另一个故事):


服务器

我猜测你的Ajax请求被服务器限制

我不确切知道这是怎么回事,而是你发送10个请求的想法;并且仅初始化了6/7个呼叫,意味着并非所有请求都通过


<强>的Ajax

async: false错误的原因是因为它冻结了您的浏览器,直到处理了同步请求为止

这意味着如果您每次发送一个请求,您的服务器将能够处理它并且相应地返回数据。显然,如果你这样做会对用户体验不利,但这是另一个故事


<强>建议

就个人而言,我认为问题可能是你的Unicorn cannot handle concurrent connections的设置,或类似的东西。虽然Unicorn can handle concurrency,也许你的开发设置只给它一个工人或什么?

基本上,如果您的服务器一次只响应1个请求,那么您的问题就有意义了。这意味着只有当独角兽忙于处理请求时,你的“错过”的ajax响应才会丢失