我使用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