好了,我试着用.htaccess为各种错误代码设置ErrorDocuments。它工作得很好,除了现在,下面的error AJAX代码永远不会运行jQuery ()函数:
$.ajax({url: url, type: "GET", cache: false, error: function(){
alert("Looking rather erroneous, are we?");
}, success: function(html){
// ...
}有什么建议吗?我想我知道原因了:.htaccess指出所有错误的原因如下:
ErrorDocument 404 /error.php/error.php具有以下特性:
<?php header("Location: /#error"); ?>因此,当它传输到index.php时,它可能会丢失404文档状态。
你有什么建议?
发布于 2011-05-30 10:58:22
尝试在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中检测到...which,以便以不同方式处理来自AJAX请求的错误:
<?php
if (isset($_SERVER['HTTP_X_MY_AJAX_HEADER'])) {
header('Status: 404');
} else {
header("Location: /#error");
}
?>您可能需要尝试使用那个$_SERVER密钥。如果您正在使用Apache/mod_php,请参阅apache_request_headers。
编辑:
您需要这样做的原因是,如下所述,header("Location: /#error");发送302 (重定向)报头,该报头覆盖404 (未找到)。你不能在404上使用Location:头来重定向(它只在3xx上有效),而且你只能发送一个状态。JQuery将(正确地)仅在错误状态下触发错误回调;这些都是4xx。
Wikipedia对此的解释非常好。
发布于 2011-05-30 07:29:53
检查Chrome开发人员工具、Firebug或开发代理中的头文件将显示此处发生的情况: PHP通过发送"Location:“头文件设置的302 Found头文件覆盖了原本会发送的404错误。因此,没有客户机(包括搜索引擎和本例中的jQuery的AJAX请求处理程序)知道发生了错误。就他们而言,请求是成功的,并获得了预期的内容(在一次重定向之后)。
发送不带重定向的更简单的404将导致更可预测的行为。
https://stackoverflow.com/questions/6170478
复制相似问题