我很难理解如何让jQuery.ajax将失败的MySQL UPDATE查询解释为错误。这是我的代码:
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查询,我总是得到一个字符串作为响应。
由于有一种解决方法(检查成功函数中的字符串),这不是一个关键问题。但如果有更正确的方法,我更喜欢这样做。
答案 0 :(得分: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除外。
答案 1 :(得分:2)
如果HTTP状态代码指示存在错误,则Ajax调用仅将响应解释为错误。 die
未将HTTP状态代码设置为500(至少PHP文档没有这么说)。如果在代码中抛出异常而不是仅使用die
,则PHP应返回500 HTTP状态。