即使服务器脚本存在错误,AJAX调用也会触发成功回调

时间:2014-12-19 06:14:13

标签: php ajax callback

即使以下PHP代码退出时出现错误,AJAX代码中的success回调仍然会被触发。那是为什么?

JavaScript代码:

$.ajax({
            type: "POST",
            url: xxxx,
            data: {info:data},
            success: function(result){
               //code here
            },
            error:function(msg)
            {
                alert('add data error,please add again');
            }
        });

php代码:

        if(is_wrong) //data is error
        {
            exit("the data is not right,please add again");
        }

1 个答案:

答案 0 :(得分:0)

在客户端和服务器之间进行通信时,有多种方法可以处理错误或成功。

<强> 1。使用HTTP状态代码

将调用其中一个$.ajax()回调(successerror),具体取决于服务器返回的HTTP status code。 “正常”成功代码是200 OK。当您使用PHP脚本发送输出时,如果一切顺利,您生成的内容将与代码200一起发送。

当您在此处致电exit()时就是这种情况。从客户端JavaScript代码的角度来看,由于它收到状态代码200 OK,它将调用success回调。如果要执行错误回调,则必须在PHP代码中发送自定义标头,发送任何其他输出之前。

您可以使用header function实现此目的。例如,以下代码可用于生成“404 Not Found”状态:

header("HTTP/1.0 404 Not Found");

在这里,您需要找到与您的代码更好对应的另一个HTTP代码。我不认为这种方法是最佳解决方案,因为HTTP状态代码是服务器状态代码,即不用于反映应用程序错误代码。

<强> 2。与您自己的约定

另一种方法是处理应用程序错误代码将处理来自success()处理程序的所有内容。您没有从PHP设置错误代码,但建立一个约定来告诉您何时出现应用程序错误或正常情况。您仍然会保留error()回调,以便您可以处理各种HTTP错误(即,如果您与服务器的连接中断)。

例如,如果您将数据从服务器发送到客户端作为JSON,您可以从您的php发送:

if(is_right) //data is ok
{
    $response = array(
        'data' => $someData, // any data you might want to send back to the client
    );
}
if(is_wrong) //data is error
{
    $response = array(
        'error' => "the data is not right,please add again"
    );
}
// Called in both cases
exit(json_encode($response));

在您的客户端代码中,您将拥有:

...,
success: function(result) {
    if(data.error !== undefined) {
        // do something if your server sent an error
        console.log(data.error);
    }
    else {
        var data = result.data;
        // do something with the data
    }
},
...