向php脚本报告AJAX错误

时间:2013-02-27 17:58:11

标签: php jquery ajax error-reporting

我在我的应用程序中使用了几个jQuery AJAX调用,有时在这些AJAX调用期间遇到错误,例如500内部服务器错误。为了找到错误的底部,我登录到服务器并检查错误日志,它提供了PHP错误。

我正在寻找一种方法来在发生这些错误时收到通知以及导致错误的PHP错误。至少是一种获得通知的方式,而不必从用户收到电子邮件,然后进入并检查日志。

我查看了本教程但不确定如何将其集成到AJAX错误中:http://net.tutsplus.com/tutorials/php/quick-tip-email-error-logs-to-yourself-with-php/并且我也不确定这是否会返回PHP错误或仅返回500内部服务器错误。

非常感谢任何想法,现有服务或解决方案!这是我的一个AJAX调用,例如:

$.ajax ({
        url: report,
        cache: false,
        success: function(html) {
            // continue with event
        },
        error: function(x, status, error) {
            // report error here
        },
        async:true
});

修改

这是更新的AJAX调用,它向php错误通知发出AJAX请求......

$.ajax ({
        url: report,
        success: function(html) {
            // success
        },
        error: function(x, status, error) {
            $.ajax ({
                url: 'admin/error_notification.php',
                type: "POST",
                data:{
                    error: error
                }
            });
        },
        async:true
});

但这很好用,但只报告发生内部服务器错误而不是导致AJAX错误的实际PHP错误。这是PHP错误处理文件:

$error = $_POST['error'];
$sysadmin_message = $error;
$sysadmin_to = 'email@example.com';
$sysadmin_subject = 'Error Notification';
$sysadmin_headers = "From: Site <accounts@example.com>\r\n";
$sysadmin_headers .= "MIME-Version: 1.0\r\n";
$sysadmin_headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($sysadmin_to, $sysadmin_subject, $sysadmin_message, $sysadmin_headers);

显然这只会发送报告的AJAX错误,但是如何在通知中添加实际的PHP错误?

1 个答案:

答案 0 :(得分:3)

您需要在错误函数内部进行第二次ajax调用以向php报告

从前端:

$.ajax ({
        url: report,
        cache: false,
        success: function(html) {
            // continue with event
        },
        error: function(x, status, error) {
            // report error here
            $.ajax ({
                url: errorlogUrl,
                data:{
                    message:'ajax error from [report]'
                }
            });
        },
        async:true
});

或者在后端使用try / catch语句:

try{
    // code that might throw an error
}
catch(Exception $e){
    // send notification based on the content of $e
}