将表单提交给两台服务器

时间:2013-03-27 02:51:49

标签: jquery ruby-on-rails same-origin-policy mechanicalturk

我希望能够将表单提交给两台服务器。这就是为什么(如果有更好的方法,我会全力以赴)

我在机械土耳其人上嵌入了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. 

我无法控制服务器,因此我无法解决此问题。

任何有关正确行事方式的建议都会被感激不尽。

2 个答案:

答案 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)来获得服务器上的更改通知