Если в PHP возникает ошибка, я хочу, чтобы ее обрабатывал метод error объекта jjery ajax, а не «подделывал», отправляя обычный HTTP-ответ 200 с некоторой ошибкой, отмечающей responseText.
Когда из PHP возвращается HTTP 500, обработчик ошибок ajax не захватывает 'responseText'.Обработчик ошибок получает объект XHR, состояние «ошибка» и сообщение об ошибке «Внутренняя ошибка сервера».
Я пытался манипулировать сообщением об ошибке ..
header( 'HTTP/1.1 500 My Custom Error Message' );
Но это не сработало.
Что сработало, так это:
function errorHandler( $number, $message, $file, $line ) {
$data = array(
'message' => $message,
'line' => $line,
'file' => $file,
'trace' => debug_backtrace()
);
header( 'Debug: ' . json_encode( $data, true ) );
}
Это заставит PHP вернуть HTTP 500 с вашими пользовательскими данными в дополнительном заголовке.
Чтобы получить доступ к пользовательской информации из обработчика ошибок ajax:
$.ajax({
success: function( response ) {
// ...
},
error: function( XHR, status, errorThrown ) {
$.each( XHR.getAllResponseHeaders().split( '\n' ), function( i, header ) {
if ( header.substr( 0, 7 ) == 'Debug: ' ) {
var error = JSON.parse( header.substr( 7 ) );
console.log( error );
}
});
}
});