让jQuery.ajax将响应解释为错误

时间:2011-02-26 15:57:44

标签: php jquery ajax response

我很难理解如何让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查询,我总是得到一个字符串作为响应。

由于有一种解决方法(检查成功函数中的字符串),这不是一个关键问题。但如果有更正确的方法,我更喜欢这样做。

2 个答案:

答案 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状态。