【问题标题】:Rails AJAX multiple simultaneous PUT calls failingRails AJAX 多个同时 PUT 调用失败
【发布时间】:2013-01-28 07:01:11
【问题描述】:

我的 Rails 应用程序在一个页面上包含多个表单,它们都与同一个控制器相关(实际上是同一个关联)。我有一个提交按钮,它使用 jQuery 通过 AJAX 一次性提交所有表单。问题是只有一些更新实际上在数据库中显示为生效。它们都使用相同的逻辑和相同的方法,一次一个,数据保持良好。但是一次全部发送,实际上只有大约一半的数据保存在数据库中。

Javascript 看起来像这样:

$(document).on('click', '.submit', function(event){
  $('form').submit();
});

这样就可以一键通过 AJAX 提交所有表单。 (图大概10个表格)

Rails 控制器看起来像这样(简化):

#prepare the JSON data

adapter = DataMapper.repository(:default).adapter
adapter.execute("UPDATE person SET facets=? WHERE id=?", JSON.generate(facets), id)

render :text => 'OK'

我认为问题可能涉及多个进程试图同时访问该方法并使用旧数据更新该字段的事实。我得到每个请求的响应“ok”,但只有大约一半的结果生效。

有什么建议吗?谢谢!

编辑:

作为更新,以防万一有人遇到同样的问题。我通过将 async 设置为 false 来解决 jQuery 中的问题。这需要浏览器多一点时间来发送,并且可能会阻止其他 javascript 事件,直到它完成,但没有一个请求会相互干扰。

【问题讨论】:

  • 只是建议,你有没有尝试连续调用form.submit()?我的意思是,发送 ajax,等待“ok”响应,发送另一个 ajax 等等,直到处理完所有表单。
  • 呃,我没想到。我在看一个 Ruby Mutex,但这样做似乎更简单。感谢您的回复。

标签: jquery ruby-on-rails ruby ajax


【解决方案1】:

这完全取决于您的浏览器,并行 HTTP 请求的最大数量是有上限的,如下所示:Official references for default values of concurrent HTTP/1.1 connections per server? 我无法找到最新的参考,所以如果您遇到任何我我很想看!

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2011-04-29
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多