我使用JQuery,PHP和PostgreSQL編寫簡單的登錄/註冊功能。以下代碼來自處理登錄的PHP文件。它在登錄名/密碼組合錯誤時引發異常。服務器拋出異常,客戶端誤解爲成功
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
$numResults = pg_num_rows($result);
if ($numResults == 0) {
throw new Exception("Incorrect combination of username and password.");
//die('Incorrect combination of username and password.');
}
然而,在客戶端jQuery的文件成功功能即使服務器拋出一個異常執行。
$.ajax({
type: "POST",
url:"login.php",
data: dataString,
success: function() {
//THIS FUNCTION IS EXECUTED....
$('#errorMsg').html('Login is successful!');
$('#errorMsg').show();
$('#usernameTxtBx').val("");
$('#passwordTxtBx').val("");
},
error:function (xhr, ajaxOptions, thrownError){
window.alert(xhr.status);
window.alert(thrownError);
}
});
當你取消對模具會發生什麼()調用? – barfoon 2011-06-02 19:08:05
那麼,HTTP請求*成功了。除了重點之外,PHP層引發了一個異常。 Apache運行,從PHP獲得了一些輸出(這是錯誤輸出,但是很好),併成功地將其交付給客戶端。如果郵遞員給你發信說你最後一次反對謀殺罪的上訴被拒絕了,那真的很糟糕,但這封信仍然可以傳送。 – 2011-06-02 19:45:39
@Tomalak:是的,但這裏的情況有所不同。根據你的比喻,這將是這樣的。你發了一封信,詢問你最後一次對定罪的上訴是否成功,並且可以說一個正面的信息總是包裹在一個綠色的信封裏,一個負面的信息包裹在一個紅色的信封裏,然後你會得到一個綠色信封,沒有成功。錯誤不一定總是發生在HTTP服務器級別上。 Imho一個未捕獲的異常應該總是生成某種類型的HTTP錯誤代碼,因爲它畢竟是一個錯誤。 – fresskoma 2011-06-02 20:47:28