2016-07-26 206 views
-1

我正在一個小網站,我正在做一個Ajax調用刪除表中的一行。我想要做的是讓PHP返回一個狀態代碼來觸發我的ajax請求中的.success.fail函數。 展望不同的問題,我想出了這個解決方案,但它不工作:ajax返回錯誤狀態代碼

AJAX調用:

function delete_mov(id){ 
    $.ajax("delete_mov.php?id="+id 
    ) 
    .success(function(){ 
     bootbox.alert("Movimento "+id+" correttamente cancellato"); 
    }) 
    .fail(function(){ 
     bootbox.alert("Problemi a cancellare il movimento "+id); 
    }); 
    } 

和php:

try{ 
    $s = $dbh -> prepare("DELETE FROM movimenti_banca WHERE di=$id"); 
    $s -> execute(); 
} 
catch (PDOException $e){ 
    http_response_code(500); 
    exit; 
    //$message = $error_message.' '.$e->getMessage(); 
} 
http_response_code(200); 

我不能得到的是觸發.fail當查詢未執行或返回錯誤時。我確信這個查詢失敗,因爲我把一個錯誤(di而不是id)放在這裏。 如果我刪除要調用的php文件,則會觸發.fail

編輯:修改我的代碼,以http_response_code進行測試,但在查詢失敗時仍未觸發500狀態。

EDIT2:調試我意識到,即使查詢有錯誤(di=$id應該id=$id)捕捉部分不進入,因此500的狀態從未設置

回答

0

jQuery不知道你的PHP腳本應該做什麼,所以它不會在返回的結果中尋找「狀態」變量。所有的jQuery知道是否實際的HTTP請求「工作」。如果回來一個200的結果,,這是成功不管什麼結果。

您或者需要讓您的success處理程序查找HTTP請求成功但數據顯示「錯誤」的情況,或者(更好)讓PHP腳本使用http_response_code()將HTTP狀態從200更改爲400或500會顯示錯誤。

+0

這正是我想要在我的PHP。返回500狀態。所以我必須使用http_response_code,很高興知道!謝謝:) –

+0

我試圖將您的解決方案應用於我的代碼(請參閱編輯的代碼),但它總是返回200.我錯過了什麼? –

1

在你的PHP代碼,使用http_response_code功能可以將HTTP狀態碼設置爲任何你想做的事情。