4

我希望能够将表单提交到两个服务器。这就是原因(如果有更好的方法,我会全力以赴)

我有一个嵌入机械土耳其人的 iframe。iframe 中有一个表单。

当工作人员提交表单时,我需要做两件事:

我需要通知我的本地服务器,以便我可以立即采取一些措施。我需要将结果发布到 mturk,以便 turk 显示下一个工作。

如果我不这样做,我的服务器需要轮询 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. 

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

任何关于这样做的正确方法的建议都将被感激地接受。

4

2 回答 2

4

使用 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>

您可以使用以下 jQuery 代码执行 POST

$(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;
    });
});
于 2013-03-27T03:45:27.293 回答
1

我决定我想这一切都错了。我不应该尝试提交表单两次。相反,我只提交给土耳其人,并使用他们的通知服务使用 SQS(http://docs.aws.amazon.com/AWSMechTurk/latest/AWSMechanicalTurkRequester/Concepts_NotificationsArticle.html)来获得服务器上更改的通知

于 2013-03-28T03:25:40.283 回答