2011-02-26 24 views
2

我很努力地理解如何讓jQuery.ajax將錯誤的MySQL UPDATE查詢解釋爲錯誤。這裏是我的代碼:獲取jQuery.ajax來將響應解釋爲錯誤

的jQuery:

$.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

$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()); 

不管是什麼 - 就算我做的mysql_query語法無效 - Ajax調用總是將響應解釋爲成功。我認爲這是因爲mysql_error()被作爲響應發送回來,ajax調用將它讀作字符串,並且顯然認爲這是成功的。當然,我可以通過檢查$ .ajax成功函數中的響應字符串來處理這個問題,但這看起來有點不合邏輯。在我可以使用$ .ajax dataType選項測試數據類型的情況下,這不是問題。但有了像上面那樣的UPDATE查詢,我總是得到一個字符串作爲響應。

由於存在解決方法(檢查成功函數中的字符串),所以這不是關鍵問題。但是,如果有更正確的方式做到這一點,我更喜歡這一點。

回答

5

無論什麼*,PHP都會發送200 OK狀態,所以jQuery無法檢測到錯誤。

你有兩種可能性:

  • 有PHP腳本明確輸出像「OK」或JSON編碼的狀態碼陣列。讓jQuery端明確地尋找那個「OK」,如果它不存在就拋出一個錯誤。

  • 有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 2011-02-26 18:19:02

+0

@maxedison如果你明確地拋出500,那應該沒問題。你也可以拋出一些其他的錯誤代碼,但是,沒有什麼錯。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html – 2011-02-26 18:41:20

+0

在這種情況下,我想我不明白你指出的「例外」有什麼相關性。我以爲你指出,拋出500錯誤總是會起作用,除了這種例外。沒有? – maxedison 2011-02-26 19:02:20

2

如果HTTP狀態碼指示出現錯誤,則Ajax調用將僅將該響應解釋爲錯誤。 die不會將HTTP狀態代碼設置爲500(至少PHP文檔沒有這麼說)。如果您在代碼中拋出異常而不是僅使用die,則PHP應返回500 HTTP狀態。