【问题标题】:Report AJAX error to php script向 php 脚本报告 AJAX 错误
【发布时间】:2013-02-13 16:01:53
【问题描述】:

我在我的应用程序中使用了几个 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 错误添加到通知中?

【问题讨论】:

  • 您的 php.ini 文件中的 display_errors 是否设置为“开启”?
  • 如果没有,您可能需要将其设置为“开启”,然后在每个非 ajax 页面上设置错误报告级别,以便不会向用户显示错误
  • 我仍然认为 try/catch 会是一个更好的解决方案

标签: php jquery ajax error-reporting


【解决方案1】:

您需要在错误函数中进行第二次 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
}

【讨论】:

  • 这很好,但是,如果我将其设置为发送错误,它只会报告发生了内部服务器错误。我仍然需要检查日志文件中的实际 PHP 错误。无论如何在 AJAX 错误时得到 PHP 错误?
  • 如果服务器返回 HTTP 500 则不会。您可以将 php.ini 文件更改为 displayErrors = On,它会显示实际错误。仅在开发环境中执行此操作,而不是生产环境的好主意。为什么不直接使用php的错误日志呢?
  • 抱歉,请重新阅读您的问题。您还可以尝试使用 try catch 块捕获 php 中的致命错误,然后在 catch 中向自己发送通知。更新了我的答案
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多