AJAX-вызов вызывает успешный обратный вызов, даже если серверный скрипт существует с ошибкой

Хотя приведенный ниже код 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");
}

-2

Решение

Существуют различные способы обработки ошибок или успеха при обмене данными между клиентом и сервером.

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
}
},
...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]