我有这些代码:
<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没有捕获。有人知道这个问题的好方法吗?
答案 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会弹出错误。
干杯阿曼。