2010-03-19 9 views
2

보안상의 이유로 제 3 자 서버에있는 HTML/Javascript를 작성했습니다. 이 페이지는 동일한 사이트의 다른 페이지에 대한 자바 스크립트 게시물을 수행합니다. 그러나 유용한 데이터로 응답하는 대신 리디렉션을 수행하려고합니다 (일반 HTML 양식을 통해이 페이지에 게시하면 브라우저가 리디렉션됩니다). 어떻게이 프로세스를 처리 할 수 ​​있습니까? 나는 기본적으로 URL 리다이렉션 (그리고 숨겨진 양식 필드에이 링크를 넣어)하려고하는 URL의 쿼리 매개 변수를 추출 할 수 싶습니다.jQuery 게시 리디렉션 응답 받기

는 여기가 게시하고있는 URL은 내가 제어 할 일이 아니라고

$.ajax({ 
    url: '/someurl/idontcontrol', 
    data: serialized_form_data, 
    async: false, 
    type: 'POST', 
    success: function(data, textStatus, x) {   
     alert(x); 
     alert(x.getAllResponseHeaders()); 
     return false; 
     $('#redirect_link').val(WHAT_DO_I_PUT_HERE); 
    } 
}); 

주 ... 내 기본 아약스 게시물입니다, 그래서 그것을 반환 것 이상의 힘이 없습니다.

업데이트 : 위의 경고를 사용하면 "[XMLHttpRequest]"개체와 "null"메시지가 나타납니다. 나는 파이어 폭스 플러그인으로 헤더를 모니터하고 있는데 예상대로 돌아올 것 같지만 자바 스크립트를 통해 액세스 할 수 없다. (x.getResponseHeader ('Location')도 시도했지만 그 외 모든 것 getResponseHeader 호출이 비어 있음).

또한 중요한 것은 모르겠지만 상태 코드는 302 (301 또는 303과 반대)입니다.

감사합니다.

답변

2

Jquery의 AJAX 호출에서 전체 HTTP 헤더를 가져올 수 없으므로이 방법으로 리디렉션을 처리 할 수 ​​없습니다.

그러나 원시 자바 스크립트 요청을 사용하면 리디렉션 (this function for single headers)을 처리 할 수있는 XMLHttpRequest getAllResponseHeaders() 메서드에 액세스 할 수 있습니다.

+0

나는 나의 성공 콜백 함수 (그렉 S의 게시물을 참조)에서 XMLHttpRequest 객체를 얻을 수 있어야 해요,하지만 그 두 가지 방법 중 하나에 내 전화 때문에 제대로 채워지고하지 않는 것 실패했습니다. – Wickethewok

5

jQuery Documentation에 따르면 success 메서드는 XMLHttpRequest 개체 인 세 번째 인수를 사용할 수 있습니다. Mozilla's XMLHttpRequest page에 따르면이 개체는 "상태"속성을 가져야합니다. 이 속성의 값을 확인하고 리디렉션 코드 (예 : 301 (영구 리디렉션) 또는 303 (임시 리디렉션)) 인 경우 처리 페이지가 리디렉션을 수행하려고하는 것으로 알려져 있습니다. "statusText"속성은 리디렉션하려는 위치를 결정하는 데 사용할 수 있어야합니다. 리디렉션하려는 경우 Ajax를 통해 데이터를 새 URL에 다시 게시 할 수 있습니다.

이상한 점은 이것을 조사 할 때 XMLHttpRequest 객체가 리디렉션 (주석 참조)을 따라야한다는 것을 나타내는 this page을 우연히 발견했습니다. 그래서 이것은 문제가 아닌 것처럼 보입니다.

처리 페이지에서 리디렉션을 수행하기 위해 HTML 메타 리디렉션 (아래처럼)을 사용하지 않는 한. 이 경우, 무슨 일을 할 수 있을지 모르겠다. 아마도 메타 태그에 대해 반환 된 HTML을 구문 분석하고 그들 중 어떤 것이 리디렉션을 시도하는지보십시오.

<meta http-equiv="refresh" content="0;url=http://www.example.com/some-redirected-page"> 
+0

성공 콜백 함수에 세 번째 매개 변수를 추가했습니다. 그러나 x.getAllResponseHeaders()를 호출하려고하면 null이 반환됩니다. – Wickethewok

+1

statusText 및 status는 XMLHttpRequest 객체의 속성이어야하며 getAllResponseHeaders는 호출하지 않아도됩니다. 경고 (x.statusText) 또는 경고 (x.status)와 같은 것이 작동합니까? – sqrl0

+0

'getAllResponseHeaders()'가'null'을 반환하는 이유를 찾았습니까? –

0

죄송 합니다만, 질문에 대한 답변이 아니지만 jQuery에서도 가능합니다. Prototype에서는 매우 간단합니다.

 
// Warning: this is Prototype, not jQuery ;-) 
//... 
onComplete: function(response) { 
    var refresh = response.getResponseHeader("Refresh"); 
    var whatever = response.getResponseHeader("Whatever"); 
} 
//... 
+0

"응답"은 XMLHttpRequest입니까? 그것이 jQuery에서 돌아오고 있기 때문에 올바르게 채워지지 않습니다 ... – Wickethewok