我有一个接口通过ajax调用一些php函数。
我只在生产中出现了一个无法捕获的错误。由于我大量使用getJson数据交换,我需要使用自定义php错误处理程序进行无提示错误和警告。
问题在于,无论如何,当代码在生产中生成错误时,我希望将其打印给用户,以了解问题所在。我的代码是:
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_ERROR:
case E_USER_ERROR:
$error= "<b>My ERROR</b> [$errno] $errstr<br />\n";
$error.= " Fatal error on line $errline in file $errfile";
$error.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
$error.= "Aborting...<br />\n";
if(isAjaxCalling()){
$_SESSION['Errors']['Errors'][]=$error;
}
ini_set('display_errors',1);
ini_set('error_reporting','E_ALL');
echo $error;
exit(1);
break;
case E_WARNING:
case E_USER_WARNING:
...
}
答案 0 :(得分:0)
你需要让客户端的ajax处理程序知道返回的值实际上是一条错误消息,最好用状态标题来做:
header("HTTP/1.0 500 Internal server error");
然后根据ajax请求全局或单独设置将处理错误的函数。在jQuery中,如何做到globaly:http://api.jquery.com/ajaxError/或者单独设置ajax请求的'error'选项。
答案 1 :(得分:0)
现在看来它已经打印了这个mod:
case E_ERROR:
case E_USER_ERROR:
$error= "<b>My ERROR</b> [$errno] $errstr<br />\n";
$error.= " Fatal error on line $errline in file $errfile";
$error.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
$error.= "Aborting...<br />\n";
if(isAjaxCalling()){
$_SESSION['Errors']['Errors'][]=$error;
}
exit( $error);
break;