2013-03-27 2 views
4

두 개의 서버로 양식을 제출할 수 있기를 원합니다. 여기에 이유가있다. (더 좋은 방법이 있다면, 나는 모두 귀다.)두 서버에 양식 제출

나는 mechanical turk에 iframe이있다. iframe에는 형식이 있습니다. 내가 지금 당장 어떤 조치를 취할 수 있도록 내 로컬 서버에 통지 할 필요가

: 작업자가 양식을 제출하면

, 나는 두 가지 작업을 수행해야합니다. 다음 작업이 터크에 표시되도록 mturk에 결과를 게시해야합니다.

이렇게하지 않으면 내 서버가 작업 완료를 위해 터크를 폴링해야하므로 비효율적입니다.

여러 스키마를 시도했지만 작동하지 못했습니다.

<%= form_for(@task, :url => "http://workersandbox.mturk.com/mturk/externalSubmit", 
:remote => true, :method => "post", :authenticity_token => false) do |f| %> 

.... 

내 unobstrusive JS에서

$(form).post({url: "/notify",opt, function() {console.log("notify done")}); 

이 결과를 파일 :

나는 다음과 같다 코드를 사용하여 로컬 한 후, 하나 개의 양식 제출을 할 아약스를 사용하는 것을 시도했다 in a js error

XMLHttpRequest cannot load http://workersandbox.mturk.com/mturk/externalSubmit. Origin http://mytest.herokuapp.com is not allowed by Access-Control-Allow-Origin. 

나는이 문제를 해결할 수 없으므로 서버를 제어 할 수 없습니다.

이렇게하는 올바른 방법에 대한 제안은 감사하게 받아 들여질 것입니다.

+4

클라이언트에서 직접 제출하는 것은 대단한 접근 방식입니다. 두 서버가 데이터를 필요로하는 경우 양식을 하나의 스크립트 (로컬 서버)에 제출합니다.이 스크립트는 자체 처리를 수행하고 다른 서버의 프록시 역할을합니다. HTTP 요청을 자체적으로 만듭니다. 생각을하면 로컬 서버에서 클라이언트로 단일 응답을 할 수 있어야하며 두 가지 측면을 모두 포함해야합니다. –

+0

예, 그게 내가하고 싶은 것입니다. 그러나 양식 제출은 클라이언트에서 수행되어야하므로 터크는 다음 이미지로 전달할 수 있습니다. 서버에서 POST를 수행하면 터크 서버에 업데이트 할 방법이 없으므로 iframe을 새로 고치지 않습니다. –

+0

하지만 "다음 이미지"는 응답의 "파이프 통과"할 수있는 URL 일 것입니다. –

답변

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

$(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

제안 해 주셔서 감사합니다. 주사위를 사용하지 않았습니다. 같은 오류가 발생합니다 : XMLHttpRequest는 http://workersandbox.mturk.com/mturk/externalSubmit을로드 할 수 없습니다. Origin http://mytest.herokuapp.com은 Access-Control-Allow-Origin이 허용하지 않습니다. –

+1

서버에서 데이터를 다시로드하려고합니까? XMLHttpRequest는 사용자가 양식을 제공하는 도메인이 아닌 다른 도메인에서 데이터를 다시 읽으려고한다는 신호입니다. –