使用JQuery处理PHP运行时错误/通知/警告的最佳方法

时间:2013-12-11 12:52:35

标签: php jquery json codeigniter error-handling

我知道问题的标题不是很客观,但很难解释我的情况。事实是,我想创建一种方法,我可以使用$.post调用处理所有可能的错误,因此我可以根据情况向用户提供正确的消息。

我有一些函数返回JSON对象作为结果。如果在我的应用程序中抛出错误,则会生成状态代码500,从而使我能够轻松捕获并处理此错误。但是如果发生运行时错误(例如,尝试在空对象上执行方法),那么PHP不会引发500错误,它只显示错误消息,给出200状态并执行执行。我试图模拟这个错误,看看如何最好地处理它,但我没有想法。

我有这段代码:

$(function() {
$('#update_marker').submit(function(e) {
    e.preventDefault();
    $.post($("#update_marker").attr("action"), $("#update_marker").serialize(), function(data, textStatus, jqXHR) {
        var json = $.parseJSON( data );
        if( json.status=="success" ) {
            new Messi( json.msg );
        } else {
            new Messi( json.msg, {title: 'Ops..', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
        }
    }).fail( function(jqXHR, textStatus, errorThrown) { general_error(); } );
    return false;
});
});

因此,在我调用的方法中,我将一些代码(如$nullobj->method();)用于模拟意外故障。我得到的是下面的结果,状态代码= 200(OK)。

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Undefined variable: nullobj</p>
<p>Filename: controllers/map.php</p>
<p>Line Number: 140</p>

</div><br />
<b>Fatal error</b>:  Call to a member function method() on a non-object in <b>D:\xampp\htdocs\xumb\application\controllers\map.php</b> on line <b>140</b><br />

这将导致我的jQuery代码将此处理为Success并且无法解析JSON对象,因此不向用户显示任何内容。在某些情况下,执行甚至不会在错误处停止,并且返回的JSON将在那里,但在页面的底部,无法访问。我可以检查返回的对象以查看它是否是JSON,但它比这更多 - 我认为。

1 个答案:

答案 0 :(得分:0)

您可以创建自己的PHP错误处理程序。然后,您可以在某些错误或任何错误上返回状态500。 请参阅此帖子:How can I get php to return 500 upon encountering a fatal exception?