Попробуйте передать заголовок вместе с вашим AJAX-запросом:
$.ajax({url: url, type: "GET", cache: false, headers: {'X-My-AJAX-Header': 'yes'}, error: function(){
alert("Looking rather erroneous, are we?");
}, success: function(html){
// ...
}
... который вы затем можете обнаружить в вашем error.php
, чтобы обрабатывать ошибки из запросов AJAX по-другому:
<?php
if (isset($_SERVER['HTTP_X_MY_AJAX_HEADER'])) {
header('Status: 404');
} else {
header("Location: /#error");
}
?>
Возможно, вам придется поэкспериментировать с этим ключом $_SERVER
. См. Также apache_request_headers
, если вы используете Apache / mod_php.
EDIT:
Причина, по которой вам нужно это сделать, заключается в том, что, как указано ниже, header("Location: /#error");
отправляет заголовок 302 (перенаправление), который переопределяет 404 (не найден). Вы не можете использовать заголовок Location:
для перенаправления на 404 (он работает только на 3xx), и вы можете отправить только один статус. JQuery будет (правильно) вызывать ответный вызов ошибки только в состоянии ошибки; это все 4хх.
Википедия объяснение этого очень хорошее.