2012-09-11 5 views
2

안녕하세요, 저는 jjson 요청에 문제가 있습니다. 나는 요청이 성공하더라도 항상 오류가 발생합니다. 지금이 코드를 가지고 :ajax json 요청, 항상 오류 반환

function sumbitLoginForm(user, pass) { 
    if (user.trim() == '' || pass.trim() == '') { 
     alert("You must enter username and password!"); 
    } else { 
     $.ajax({ 
      type : 'POST', 
      url : 'https://url.php', 
      dataType : 'json', 
      data : { 
       userlogin : user, 
       userpass : pass 
      }, 
      contentType: "application/json;", 
      success : function(data) { 
       $("#images").html("uspeshno"); 
      }, 
      error : function(data) { 
       $("#images").html("greshka"); 
      } 
     }); 
     } 

    return false; 
} 

$(document).ready(function() { 
    clearPageInputs(); 
    $("#submitButton").click(function() { 
     sumbitLoginForm($("#username").val(), $("#password").val()); 
    }); 
}); 

내가 입력 한 사용자 이름과 암호에 상관없이 항상 오류가 발생합니다. 하지만 요청 상태가 바뀌고 있습니다. 올바른 사용자를 입력하고 상태 302로 이동하면 일시적으로 이동하지만 잘못된 사용자를 입력하거나 상태 200을 확인하면 OK입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

+0

clearPageInputs()가 수행하는 작업은 무엇입니까? – Jignesh

+0

'function clearPageInputs() { \t $ ("input [type = text]") .Val (''); } ' –

+0

URL에 오류가 있습니다. 오류 본문을 조사하면 진정한 URL을 찾을 수 있습니다. – Ilya

답변

0

PRG 패턴 및 아약스

서버가 사용자 ID와 암호가 확인되지 않습니다 HTTP 200 상태 코드를 반환 것 같습니다. 이것은 HTTP 오류 코드가 응용 프로그램 오류를위한 것이 아니라 HTTP 프로토콜 오류를위한 것이므로 올바른 동작입니다.

사용자 ID와 암호가 일치하면 다른 페이지로 리디렉션됩니다. 이는 정상적인 동작입니다 (예 : 다른 사람이 뒤로 키를 사용하여 로그인 자격 증명을 다시 사용할 수 없게합니다.

이것은 게시/리디렉션/가져 오기 패턴이라고합니다.

참조 : http://en.wikipedia.org/wiki/Post/Redirect/Get

문제는 PRG 패턴이 Ajax 애플리케이션에 좋은 재생되지 않는다는 것입니다. 리디렉션은 브라우저에서 처리해야합니다. 따라서 jQuery 코드는 투명합니다. Ajax html 응답은 302 페이지의 Location 헤더에 언급 된 페이지입니다. Ajax 애플리케이션은 리디렉션되고 있음을 알 수 없습니다. 그래서 네가 붙어있다.

내 프로젝트 중 하나에서 서버 측에서이 문제를 해결했습니다. Ajax 호출을 감지하면 리디렉션을 보내지 않지만 일반적인 200 응답을 보냅니다. 이것은 서버 코드에 대한 액세스 권한이있는 경우에만 작동합니다.

Ajax 호출에 대한 리디렉션을 변경할 수없는 경우 응답 헤더 또는 html을 구문 분석하여 사용자가 리디렉션되었는지 확인하고 이에 따라 조치를 취할 수 있습니다. 로그인하면 쿠키가 설정되므로 쿠키의 존재 여부를 확인할 수 있습니다.