2011-02-26 2 views
2

jQuery.ajax가 실패한 MySQL UPDATE 쿼리를 오류로 해석하는 방법을 이해하는 데 어려움을 겪고있다.jQuery.ajax로 응답을 오류로 해석하기

jQuery를 : - 내가는 mysql_query 구문 잘못을하더라도 - AJAX 호출이 항상 성공으로 응답을 해석하지

$data = $_POST['formData']; 
$firstName = mysql_real_escape_string($data['first name']); 
$lastName = mysql_real_escape_string($data['last name']); 
$email = mysql_real_escape_string($data['email address']); 
$password = mysql_real_escape_string($data['password']); 


mysql_query("INSERT INTO users (first_name, last_name, email, password) VALUES ('$firstName', '$lastName', '$email', '$password')") or die(mysql_error()); 

는 상관없이

$.ajax({ 
    type:'POST', 
    url:'/ajax/registration.php', 
    data:{formData: formData}, 
    success:function(data){eformDef.forms.registration.success(data);}, 
    error:function(data){eformDef.forms.registration.success(data);} 
}); 

PHP 여기 내 코드입니다 . 나는 mysql_error()가 응답으로 되돌려 보내 졌기 때문에 Ajax 호출은이를 문자열로 읽으며, 성공으로 간주한다고 가정합니다. 물론 $ .ajax 성공 함수에서 응답 문자열을 검사하여이 문제를 처리 할 수 ​​있지만 이는 약간 비논리적 인 것처럼 보입니다. $ .ajax dataType 옵션을 사용하여 데이터 유형을 테스트 할 수있는 경우에는 문제가되지 않습니다. 위와 같은 UPDATE 쿼리를 사용하면 항상 응답 문자열로 표시됩니다.

해결 방법이 있으므로 (성공 함수의 문자열 검사) 중요한 문제는 아닙니다. 그러나 이것을하는 더 정확한 방법이 있다면, 나는 그것을 선호합니다.

답변

5

PHP는 200 OK이 무엇이든 관계없이 상태를 보내므로 jQuery가 오류를 감지 할 방법이 없습니다.

  • 명시 적으로 PHP 스크립트 상태 코드가 "OK"또는 JSON 인코딩 된 배열과 같은 출력 뭔가 유무 :

    당신은 두 가지 가능성이있다. jQuery 쪽에서 "OK"를 명시 적으로 찾고 오류가없는 경우 throw하십시오.

  • 오류가 발생하는 경우 PHP 스크립트가 예를 들어, 오류 상태 코드를 발생 유무 :

    $query = mysql_query(......); 
    
        if (!$query) 
        { 
        header("HTTP/1.1 500 Internal Server Error"); 
        echo mysql_error(); // Detailed error message in the response body 
        die(); 
        } 
    

*this exception를 제외하고.

+0

감사합니다. 훌륭한 작품입니다. 그 예외에 관해서는 ... 그러나 그것은 단지 500 오류에만 영향을 미치는 것으로 보입니다. 404와 같은 다른 오류 번호를 전달하면 연결 한 예외에 대한 걱정없이 동일한 기능을 얻을 수 있습니까? – maxedison

+0

@maxedison 명시 적으로 500을 던지면 괜찮을 것입니다. 당신은 또한 다른 오류 코드를 던질 수도 있지만, 거기에는 아무런 문제가 없습니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html –

+0

그런 경우, 나는 당신이 지적한 "예외"와 어떤 관련성이 있는지 이해하지 못한다고 생각합니다. 나는이 예외를 제외하고는 항상 500 에러를 던지는 것이 효과가 있다고 말한 것으로 생각했다. 아니? – maxedison

2

HTTP 상태 코드에 오류가 있음을 나타내면 Ajax 호출은 응답을 오류로 해석합니다. die은 HTTP 상태 코드를 500으로 설정하지 않습니다 (최소한 PHP 설명서에서는 그렇게 말하지 않습니다). die을 사용하는 대신 코드에 예외가 발생하면 PHP는 500 HTTP 상태를 반환해야합니다.

관련 문제