我希望能够将表单提交给两台服务器。这就是为什么(如果有更好的方法,我会全力以赴)
我在机械土耳其人上嵌入了iframe。 iframe中有一个表单。
当工人提交表单时,我需要做两件事:
我需要通知我的本地服务器,以便我可以立即采取一些行动。 我需要将结果发布到mturk,以便土耳其人显示下一个作业。
如果我不这样做,我的服务器需要轮询turk以完成工作,效率很低。
我尝试了多种方案,但无法让它们发挥作用。
我尝试使用ajax在本地执行一个帖子,并使用如下代码使用一个表单提交:
<%= form_for(@task, :url => "http://workersandbox.mturk.com/mturk/externalSubmit",
:remote => true, :method => "post", :authenticity_token => false) do |f| %>
....
和我不引人注目的js文件
$(form).post({url: "/notify",opt, function() {console.log("notify done")});
这会导致js错误
XMLHttpRequest cannot load http://workersandbox.mturk.com/mturk/externalSubmit. Origin http://mytest.herokuapp.com is not allowed by Access-Control-Allow-Origin.
我无法控制服务器,因此我无法解决此问题。
任何有关正确行事方式的建议都会被感激不尽。
答案 0 :(得分:2)
使用jQuery很容易。基本上,如果您使用.serialize()
方法,则可以将数据发布到任意数量的位置。
假设您有一个表格:
<form>
<input type="text" id="field1" name="field1" value="abc123" />
<input type="text" id="field2" name="field2" value="def456" />
<input type="submit" value="Submit" />
</form>
您可以使用以下执行POST的jQuery代码
$(function() {
$('form').submit(function() {
var data = $(this).serialize();
$.post("http://www.location1.com/somePlace/", data, function() { });
$.post("http://www.location2.com/anotherPlace/", data, function() { });
return false;
});
});
答案 1 :(得分:1)
我认为我错了。我不应该尝试两次提交表格。相反,我只是向turk提交,并使用他们的通知服务使用SQS(http://docs.aws.amazon.com/AWSMechTurk/latest/AWSMechanicalTurkRequester/Concepts_NotificationsArticle.html)来获得服务器上的更改通知