我正在使用rails来对ajax调用进行脚本响应。我点击一个按钮,调用ajax,然后呈现一组项目作为响应并添加到页面中。
如果我快速点击按钮(比如说10次),将会呈现10个响应集。但是,在我的日志中,我只会看到6个帖子(或7个,具体取决于我点击的速度),相同数量的数据库条目以及相同数量的响应。在Chrome中,我在网络工具标签上也只有6个帖子。
如果我将jquery调用设置为async:false(我明白这很糟糕?),我似乎没有问题。
如果有所作为,我在开发中使用Unicorn。
谁能告诉我这里发生了什么(以及我如何解决)?如果没有回复,帖子回复如何呈现?这是UJS竞争条件吗?
答案 0 :(得分:0)
在我阅读时,我怀疑情况会如此;你的async: false
实验似乎证实了这一点(它是否是另一个故事):
服务器强>
我猜测你的Ajax
请求被服务器限制
我不确切知道这是怎么回事,而是你发送10个请求的想法;并且仅初始化了6/7个呼叫,意味着并非所有请求都通过
<强>的Ajax 强>
async: false
错误的原因是因为它冻结了您的浏览器,直到处理了同步请求为止
这意味着如果您每次发送一个请求,您的服务器将能够处理它并且相应地返回数据。显然,如果你这样做会对用户体验不利,但这是另一个故事
<强>建议强>
就个人而言,我认为问题可能是你的Unicorn cannot handle concurrent connections的设置,或类似的东西。虽然Unicorn can handle concurrency,也许你的开发设置只给它一个工人或什么?
基本上,如果您的服务器一次只响应1个请求,那么您的问题就有意义了。这意味着只有当独角兽忙于处理请求时,你的“错过”的ajax响应才会丢失