Хотя приведенный ниже код PHP завершается с ошибкой, success
обратный вызов в коде AJAX все еще срабатывает. Это почему?
Код 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. с кодом статуса HTTP
Один из $.ajax()
обратные вызовы (success
а также error
) будет вызываться, в зависимости от Код состояния HTTP возвращается сервером. «Нормальный» код успеха — 200 OK. Когда вы отправляете вывод с помощью скрипта PHP, если все идет хорошо, ваш сгенерированный контент будет отправлен с кодом 200.
Это тот случай, когда вы звоните exit()
Вот. С точки зрения вашего JavaScript-кода на стороне клиента, так как он получил код состояния 200 OK, он вызовет success
Перезвоните. Если вы хотите, чтобы выполнялся обратный вызов ошибки, вы должны отправить пользовательские заголовки в коде PHP, до отправка любого другого вывода.
Вы можете достичь этого с функция заголовка. Например, следующий код может быть использован для создания статуса «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
}
},
...
Других решений пока нет …