即使以下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");
}
答案 0 :(得分:0)
在客户端和服务器之间进行通信时,有多种方法可以处理错误或成功。
<强> 1。使用HTTP状态代码
将调用其中一个$.ajax()
回调(success
和error
),具体取决于服务器返回的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
}
},
...