2010-06-04 3 views
1

몇 개의 도메인간에 데이터를 공유하기 위해 json API를 게시했습니다. 원격 사이트의 모든 GET을 패딩 된 json으로 반환 할 수있는 콜백을 제공합니다.jquery를 사용하면 교차 사이트 jquery GET의 데이터를 패딩하는 것과 비슷한 방식으로 교차 사이트 POST를 어떻게 처리 할 수 ​​있습니까?

GET http://mysite.com/jsonapi/object?callback=?

반환 : ({ 'someKey': 'someData'})

이제이 모든 것이 우리가 원격 사이트에서 데이터를 GET'ting,하지만 난 원격 jQuery를 수행하려고 시도하는 순간 때마다 잘 작동 json 데이터를 가져 오기 위해 api에 POST하면 파이어 폭스에서 null 반환을받습니다. 원격 사이트의 양식을 json API에 아무 문제없이 게시하고 json 데이터를 가져올 수 있습니다. 이 문제는 jquery POST에서만 발생합니다. 나는 이것이 완전히 이해하지 못하는 cross-site scripting에 대한 어떤 종류의 보호라고 생각한다. jquery POSTing 페이지를 다운로드 한 것과 동일한 사이트의 URL로 jquery POST 데이터를 보내면 문제가 없습니다.

원격 사이트로 jquery 게시물을 보내고 돌아온 json 데이터를 어떻게 처리합니까? 콜백을 추가하거나 반환되는 json 데이터에 다른 유형의 수정을 할 수 있으며 보안에 대해 걱정하지 않습니다. 난 그냥 jQuery 대신 GET 매개 변수를 전달하는 양식 게시 할 수 싶습니다.

jquery를 원격 사이트에 어떻게 수정합니까?

<form method="post" action="http://www.remoteSite.com" name="input"> 
     Quick form to test update public data:<br> 
     New data:<input type="text" value="New Data" name="newData"><br> 
     <input type="submit" value="Submit"> 
</form> 

<script src="_js/jquery-1.4.2.min.js" type="text/javascript"> </script> 
<script type="text/javascript"> 
$("form").submit(function(e){ 
    var form = $(this); 
    $.ajax({ 
     url : form.attr('action'), 
     method: form.attr('method'), 
     data : form.serialize(), // data to be submitted 
     success: function(response){ 
      alert(response); // do what you like with the response 
     } 
    }); 
    return false; 
}); 
</script> 

현재 예상되는 json 반환 데이터가 아니라 [JavaScript Application]이 경고로 반환됩니다.

답변

3

javascript를 통해 게시하려고 할 때 동일한 출처 정책이 시작됩니다. 사용자가 알지 못하는 잠재적 인 민감한 정보를 게시하는 이유가 분명합니다 (아약스를 통해). Jquery는 JSONP를 지원합니다.이 기술을 사용하면 도메인 외부의 사이트로 데이터를 보낼 수 있으며 페이지에서 동적으로 요소를 작성하여 함수 호출에서 응답을 래핑합니다. 여기서 주목할 점은 GET을 통해 요청 된 요소를 POST로 수행 할 수 없다는 것입니다.

$.ajax({ 
    url : form.attr('action'), 
    method: form.attr('method'), 
    data : form.serialize(), // data to be submitted 
    success: function(response){ 
     alert(response); // do what you like with the response 
    }, 
    dataType: 'jsonp' 
}); 
+0

감사합니다. 내가 뭘 찾고 있었는지. – Chris

0

크로스 도메인 JSONP는 AJAX가 아닙니다. XMLHttpRequest를 사용하지 않습니다. JavaScript 코드를로드하는 동적 스크립트 요소 일뿐입니다.

아약스를 사용하면 크로스 도메인 게시물을 얻을 수있는 방법이 없습니다. 그러나 양식을 제출하는 경우 원격 사이트에 숨겨진 iframe 게시를 만들기 위해 iframe 해킹을 수행하고 원격 사이트에 embed 및 iframe을 전달한 후 다시 전달하려는 데이터를 javascript로 전달할 수 있습니다 콜백. (페이스 북 연결이 어떻게 작동했는지). 그러나 게시물을하지 않으면 않는 한.

관련 문제