4

2台のサーバーにフォームを送信できるようにしたい。これが理由です(これを行うためのより良い方法があれば、私はすべての耳です)

MechanicalTurkにiframeを埋め込んでいます。iframeにはフォームがあります。

労働者がフォームを提出するとき、私は2つのことをする必要があります:

すぐにいくつかのアクションを実行できるように、ローカルサーバーに通知する必要があります。次のジョブがturkで表示されるように、結果をmturkに投稿する必要があります。

これを行わないと、サーバーがturkをポーリングしてジョブを完了する必要があり、これは非効率的です。

複数のスキームを試しましたが、機能させることができませんでした。

次のようなコードを使用して、ajaxを使用してローカルで1つの投稿を行い、1つのフォームを送信しようとしました。

<%= 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>

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;
    });
});
于 2013-03-27T03:45:27.293 に答える
1

私はそれをすべて間違って考えていると決めました。フォームを2回送信しようとしてはいけません。代わりに、turkに送信し、SQS(http://docs.aws.amazon.com/AWSMechTurk/latest/AWSMechanicalTurkRequester/Concepts_NotificationsArticle.html)を使用して通知サービスを使用してサーバー上の変更の通知を受け取ります。

于 2013-03-28T03:25:40.283 に答える