PHP脚本的错误没有由$ .ajax处理

时间:2010-12-23 13:06:51

标签: php jquery ajax timeout

我有这些代码:

<script>
$.ajaxSetup({
 timeout:3000,
 success: function(){alert('True!!!');},
 error:function (){
                    alert('false');
                }
});
$.ajax({
 url:'test.php',
});
</script>

我的'test.php'是:

<?
sleep(8);
$124415;
?>

所以它有解析器错误,但ajax立即返回“True”,但如果第二行有注释,则等待3秒。并返回“假”。任何想法? 我有更改代码test.php:

<? 
function shutdown() {
    header("HTTP/1.0 500 Internal Server Error");
ob_flush();
}
ob_start();
register_shutdown_function('shutdown');
spl_autoload_register('foo');// Fatal Error => Ajax false
//$112123123;//if turn on will be Parse Error => Ajax true
?>

所以现在ajax警告我有关致命错误,但是Parser Error没有捕获。有人知道这个问题的好方法吗?

2 个答案:

答案 0 :(得分:6)

按设计工作。

如果出现解析器错误,PHP脚本将失败并立即终止。然而,在ajax端,这仍然是成功的,因为PHP无论如何都会发送200 OK标头。

(PHP将针对致命错误only if error_reporting and display_errors are turned off发送500标头。)

如果没有解析器错误,脚本将休眠8秒,达到3秒超时,从而导致Ajax错误。

答案 1 :(得分:0)

这是正常的行为:在第一种情况下你的php脚本返回php解析错误,ajax得到它, 所以你的ajax就行了。

下一个案例你的php脚本比ajax可以等待的时间长,所以你的ajax会弹出错误。

干杯阿曼。