【问题标题】:Error at php script didn`t handle by $.ajaxphp 脚本中的错误没有被 $.ajax 处理
【发布时间】:2011-05-29 23:21:27
【问题描述】:

我有这些代码:

<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 没有捕捉到。有人知道这个问题的好方法吗?

【问题讨论】:

  • 解析器错误仍然是 200 还是 500 状态到达客户端?
  • 我怎样才能知道什么是错误?

标签: php jquery ajax timeout


【解决方案1】:

按设计工作。

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

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

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

【讨论】:

  • 所以我的新 test.php :
  • @Kirill 如果你使用的是 PHP > 5.2.4,这应该会抛出 500
  • 我不敢相信 ajax 构造不会在不更改 PHP 的情况下显示错误
  • @Kirill 一个 PHP 错误不是 HTTP 错误,它就是这样......您可以创建一个自定义错误处理程序来发送一个 500 标头,但遗憾的是,即使这样也行不通以防万一解析错误。
  • 好的,我在 PHP 5.3.3 上运行我的脚本并解决了你的错误,这仍然无法正常工作。
【解决方案2】:

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

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

干杯阿曼。

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多