我的Rails应用程序在一个页面上包含多个表单,这些表单都与同一个控制器(实际上是同一个关联)有关。我有一个提交按钮,它使用jQuery通过AJAX一次提交所有表单。问题是只有一些更新实际显示为在数据库中生效。他们都使用相同的逻辑和相同的方法,并且一次一个,数据保持良好。但是所有的数据都立即发送,实际上只有大约一半的数据保存在数据库中。Rails AJAX多个同时PUT调用失败
的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'
我认为这个问题可能涉及多个进程试图在同一时间和更新访问方法的事实旧数据字段。对于每个请求,我都会收到响应'确定',但只有大约一半的结果生效。
有什么建议吗?谢谢!
编辑:
就像一个更新,万一有人有这个相同的问题。我通过将async设置为false来解决jQuery中的问题。这需要浏览器稍长一些才能发送,并且可能会阻止其他JavaScript事件直到完成,但是没有任何请求会互相干扰。
只是建议,你尝试调用form.submit()在连续的顺序?我的意思是,发送ajax,等待'ok'响应,发送另一个ajax等,直到处理完所有表单。 – shrimpsushi 2013-02-12 21:10:33
呵呵,我没有想到这一点。我在看一个Ruby Mutex,但这样做似乎更简单。感谢您的答复。 – Cameron 2013-02-12 21:22:42