2012-01-25 5 views
1

jQuery.post()을 사용하여 서버로 데이터를 보내면 서버가 클라이언트에 데이터를 다시 보내면 post() 콜백이 호출됩니다. 서버가 리디렉션 헤더 필드 ("Location")와 함께 응답 할 수 있음을 알고 있습니다.jQuery.post() 및 ajax를 통해 리디렉션

현재 리디렉션이 발생하지 않습니다. 그 이유는 무엇일까요? 리디렉션이 발생하기 전에 스크립트를 실행할 수 있습니까?

업데이트 : 스 니 코드. POST 메서드가 서버에 의해 받아 들여지고 서버가 POST에 응답한다는 것을 알고 있습니다. 어떻게 든, 항상 error()이 호출되고 있습니다 (클라이언트 \ browswer가 응답을 받기 전에도 문제가없는 것처럼 보입니다).

무엇이 잘못 되었나요?

$(document).ready(function() { 
    $("#loginForm").submit(function() { 
     $.ajax({ 
      type : "POST", 
      data : $("#loginForm :input").not("#loginBtn").serialize(), 
      url : "http://localhost/auth", 
      success : function(data, textStatus, jqXHR) { 
       alert("success"); 
       alert(jqXHR.getResponseHeader("Location")); 
      }, 
      error : function(jqXHR, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 
    }); 
}); 
+0

질문에 오류 정보를 추가 할 수 있습니까? –

답변

-2

리디렉션을 발생시키는 작업을 수행하면 JQuery가 리디렉션을 감지하지 못합니다. 브라우저는 장면 뒤에서 자동으로 처리하여 끊김없는 경험을 제공합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 브라우저가 리디렉션을 수행하지 않습니다. 나는 서버 응답이'jQeury.post()'콜백 함수에 의해 처리되기 때문이라고 생각한다. – MrIzik

+0

예를 들어 게시하지만 세션 시간이 초과되면 서버가 사용자를 로그인 페이지로 리디렉션 할 수 있습니다. jquery 호출은 브라우저가 처리하기 때문에 이것이 발생했다는 것을 전혀 모릅니다. 이 상황에서는 응답을 제어 할 수 없습니다.당신이 당신의 사건을 통제한다면, JQuery가 알 수 있도록 뭔가를 포함시켜야합니다. 죄송합니다, 충분히 당신의 문제를 이해하지 못해요, 그래서 내 대답이 유용하지 않다면 사과드립니다.) – NibblyPig

1

jquery.post()은 Ajax 요청을 발행하여 작동합니다. Ajax 호출에서 PHP 스크립트는 비동기 적으로 작동합니다 (배경 스레드라고 생각하면됩니다). 따라서 PHP 스크립트는 클라이언트 브라우저를 리디렉션 할 수 없습니다. PHP 스크립트를 리다이렉트 할 URL에 응답하고 자바 스크립트를 사용하여 리다이렉트하는 방법이 될 것입니다. 당신의 POST 콜백에서

:

function(data){ //data will be the URL to redirect to, sent back by the PHP script 
window.location = data; 
} 

편집

JQuery와 문서에서 jquery.ajax()

에 statusCode에지도

Default: {} 
(1.5 추가)

응답에 해당 코드가있을 때 호출 할 숫자 HTTP 코드 및 함수의 맵입니다. 응답 상태 인 경우 예를 들어, 다음은 경고합니다 404 :

$.ajax({ 
    statusCode: { 
    404: function() { 
     alert('page not found'); 
    } 
    } 
}); 

요청, 상태 코드의 기능은 성공 콜백과 같은 매개 변수를 성공하면

; 오류가 발생하면 오류 콜백과 동일한 매개 변수를 사용합니다.

+0

나는 일반적인 해결책을 찾고 있는데, 뭔가 서버 구현에 의존하지 않습니다. 즉, HTTP 헤더 등을 사용합니다. – MrIzik

+0

응답을 받으면 302 헤더 상태를 확인할 수 있습니다. 나는 PHP 스크립트가 명시 적으로 당신에게 그것을 보내지 않고, 당신이 어떻게 위치를 얻을 수 있었는지 모르겠다 – xbonez

+0

PHP를 잊어 버려주세요. jQuery/javascript/DOM에서 HTTP 응답 헤더에 액세스 할 수 있습니까? – MrIzik

-1

는 리디렉션 경우에 어떤 플래그 "재"를하고

if(responce == 'redirect') 
    window.location = "Your url" 

서버에 리디렉션하지 마십시오 사용하여 클라이언트 측 리디렉션을 쓰기 같이 인쇄를 재지 않고 간단한 응답을하시기 바랍니다.

작동합니다.

관련 문제