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

max*_*son 2 php ajax jquery 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);}
});
Run Code Online (Sandbox Code Playgroud)

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());
Run Code Online (Sandbox Code Playgroud)

无论如何 - 即使我使mysql_query语法无效 - ajax调用总是将响应解释为成功.我假设这是因为mysql_error()作为响应被发送回来,ajax调用将其作为字符串读取,并且显然认为这是成功的.当然我可以通过检查$ .ajax成功函数中的响应字符串来解决这个问题,但这看起来有点不合逻辑.如果我可以使用$ .ajax dataType选项测试数据类型,这不是问题.但是使用像上面那样的UPDATE查询,我总是得到一个字符串作为响应.

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

Pek*_*ica 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();
       }
    
    Run Code Online (Sandbox Code Playgroud)

*除了这个例外.