2011-02-26 23 views
2

我很努力地理解如何让jQuery.ajax将错误的MySQL UPDATE查询解释为错误。这里是我的代码:获取jQuery.ajax来将响应解释为错误

的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查询,我总是得到一个字符串作为响应。

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

回答

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

+0

谢谢,这个作品很棒。关于这个例外......但这似乎只影响500错误。我可以只传递一个不同的错误号码,如404,以获得相同的功能,而不必担心您链接的异常? – maxedison 2011-02-26 18:19:02

+0

@maxedison如果你明确地抛出500,那应该没问题。你也可以抛出一些其他的错误代码,但是,没有什么错。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html – 2011-02-26 18:41:20

+0

在这种情况下,我想我不明白你指出的“例外”有什么相关性。我以为你指出,抛出500错误总是会起作用,除了这种例外。没有? – maxedison 2011-02-26 19:02:20

2

如果HTTP状态码指示出现错误,则Ajax调用将仅将该响应解释为错误。 die不会将HTTP状态代码设置为500(至少PHP文档没有这么说)。如果您在代码中抛出异常而不是仅使用die,则PHP应返回500 HTTP状态。