2010-06-03 2 views
0

에서 응답을 얻기 위해 어떻게이 (가) AJAX 요청을 제출하려면 다음을 사용하는 페이지가 : 나는 주소 표시 줄에서 요청 설명서를 한 경우가 jQuery.get 요청

function oc() 
{ 
    jQuery.get(
    "http://somewhere.com:5001/ajax/options/", 
    jQuery('#selectform').serialize(), 
    function(data,statusm,xml){ 
     // I got nothing!!! 
     return; 
    } 
); 
} 

을 가지 작동합니다. JS에서 요청을하면 로깅을 통해 서버 측이 제대로 작동하고 있지만 콜백으로 볼 때 회신의 내용을 가져올 수없는 것으로 보입니다.

무엇이 잘못 되었나요?

답변

3

는 당신이 보는 가능성이 것은에서 발로 same-origin policy입니다.이 사이트 간 스크립팅 공격을 방지하기 위해 브라우저의 보안 기능입니다 및에있는 것으로 다른 포트에 수를하더라도 동일한 도메인/호스트 접근 정책이 적용되는 한 "다른 영역". example table on Wikipedia은 허락되지 않거나 허락되지 않는 것을 보여주는 훌륭한 일을합니다.

Chrome에서 --disable-web-security 명령 줄 스위치를 사용하여 추가로 테스트 할 수 있습니다. 그러면 스크립트가 작동합니다 ... 해결책이 아니며 문제를 확인하는 데 도움이됩니다.

즉, 동일한 도메인이나 호스트 및 포트에 요청해야합니다. 그렇지 않으면 차단됩니다. 이 규칙의 예외는 주로이 목적으로 사용되는 JSONP을 사용합니다. 괜찮은 예가 herehere입니다.

+0

닉, 그는 서버 측이 올바르게 작동하고 있다고 말했습니다. 그것이 원산지 문제라면 그것은 일어나지 않을 것입니다. –

+1

@Matthew - 똑같은 출처 문제에서 * 정확히 *이 동작을 볼 수 있습니다. 서버를 보호하기위한 것이 아니라 클라이언트 보호, 즉 응답 차단입니다. –

+0

XHR이 아닌 다른 방법 (예 : 이미지 태그)으로 시각적 인 요청을 할 수 있습니다. http://jsfiddle.net/Degf7/ Wireshark를 열어보십시오. 오류가 발생하고 요청을 보내지 않습니다. 경우에 따라 오류가 마스크 처리되므로 빈 데이터로 success 함수가 호출됩니다. 그러나 요청은 실제로 전송되지 않습니다. –

1

$ .ajax와 함께 오류 기능을 사용해보십시오.

$.ajax({ 
    url: "http://somewhere.com:5001/ajax/options/", 
    data: jQuery('#selectform').serialize(), 
    success: function(data,statusm,xml){ 
    // I got nothing!!! 
    return; 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    // do something 
    } 
}); 
관련 문제