0

我的 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 事件直到它完成,但没有一个请求会相互干扰。

4

1 回答 1

0

这一切都取决于您的浏览器,最大并行 HTTP 请求数是有上限的,如此处所问:Official references for default values of concurrent HTTP/1.1 connections per server? 我一直无法找到最新的参考资料,所以如果您遇到任何我很想看的资料!

希望这可以帮助。

于 2013-02-12T23:10:40.007 回答