jQuery AJAX请求因PHP异常而失败

jQuery AJAX请求因PHP异常而失败,php,jquery,exception,header,kohana,Php,Jquery,Exception,Header,Kohana,我将Kohana PHP框架用于一个应用程序。现在我遇到了一个问题,当jQuery对某个文件执行AJAX请求时,它确实可以工作,但是当这个文件抛出一个PHP异常时,jQuery失败并且不显示文件的输出 举个小例子,这是Javascript的一部分: $.post($('#' + e.currentTarget.id).attr('action'), $('#' + e.currentTarget.id).serialize(), function ( data ) { alert ( d

我将Kohana PHP框架用于一个应用程序。现在我遇到了一个问题,当jQuery对某个文件执行AJAX请求时,它确实可以工作,但是当这个文件抛出一个PHP异常时,jQuery失败并且不显示文件的输出

举个小例子,这是Javascript的一部分:

$.post($('#' + e.currentTarget.id).attr('action'), $('#' + e.currentTarget.id).serialize(), function ( data )
{
    alert ( data );
}/*, 'json' */);
现在,当PHP文件执行此操作时(警报框弹出):

对于PHP异常(失败):

现在我看不出有什么问题,PHP在这两方面都与一些HTML相呼应。以前有人遇到过这个问题,你是怎么解决的


谢谢你的帮助

如果您希望保持当前的错误报告级别,但仍然向jQuery提供一条漂亮的错误消息,那么您可以将代码包装在try-catch块中

try {
  // your code
} catch(Exception $e) {
  echo $e->getMessage();  // formatted nicely or a generic message or something.
}
+1和布莱恩。 如果您想知道原因,这里是:jQuery希望接收JSON数据。当PHP输出错误时,它会输出未包含在引号中的HTML和纯文本,这是无效的JSON,因此jQuery失败


如果您注释掉了“json”参数,那么如果什么也没有发生,那是因为您的服务器发送了一个表示错误的状态代码(任何状态代码>500)。如果您能向我们提供这些信息,那就太好了。

为了说明错误是什么,您可以在ajax调用中这样做

jQuery.ajax({
    type: "POST",
    ...
    error: function(xhr, desc, e) {
       alert(xhr.responseText);
    }
});

这应该会用相同的html提醒您,抛出PHP异常会在常规页面上显示。我鼓励您尝试Firefox的Firebug插件。Firebug将允许您轻松查看AJAX请求,并查看应用程序返回的数据。

正如一些人已经猜到的,Kohana的默认异常处理程序将HTTP响应状态设置为“500内部服务器错误”。如果希望将错误返回到JavaScript,则需要捕获异常并手动输出错误消息

得益于goreckm的解决方案:

$.ajax({
    type    : 'POST',
    url     : $('#' + e.currentTarget.id).attr('action'), // http://www....
    dataType: 'json',
    data    : $('#' + e.currentTarget.id).serialize(), // Data to be sent
    success : function ( data )
    {
        alert ( data );
    },
    error   : function ( ajax_response )
    {
        alert ( ajax_response.responseText );
    }
});

PHP的错误报告级别设置为什么?如果它没有设置为显示异常(虽然应该设置),那么您将看不到任何输出。它确实显示错误,当抛出异常时,它将以错误消息的形式输出整个回溯(HTML)。如果PHP没有显示错误(确实如此),逻辑上可见的Javascript应该会弹出一个空的警报框?我假设Kohana是这样做的,当出现异常时,Kohana会将整个回溯作为错误消息(HTML)返回。只是标题不同。不过如果你自己做,它可能不会一直冒泡到顶部,导致Kohana更改标题?但是当JSON被注释掉时(如我的示例和live版本中),它只会显示整个HTML输出?这项工作,任何其他有此问题的人,请参阅我在下面发布的代码,谢谢!这就是问题所在,是的,我会在有新问题的时候再去看看,Firefox在Mac上的速度很慢,对于一些方便的插件来说太糟糕了
.   Connection:close
.   Content-Encoding:gzip
.   Content-Length:1896
.   Content-Type:text/html; charset=UTF-8
.   Date:Wed, 22 Jul 2009 14:23:11 GMT
.   Server:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
.   Vary:Accept-Encoding
.   X-Powered-By:PHP/5.2.6
try {
  // your code
} catch(Exception $e) {
  echo $e->getMessage();  // formatted nicely or a generic message or something.
}
jQuery.ajax({
    type: "POST",
    ...
    error: function(xhr, desc, e) {
       alert(xhr.responseText);
    }
});
$.ajax({
    type    : 'POST',
    url     : $('#' + e.currentTarget.id).attr('action'), // http://www....
    dataType: 'json',
    data    : $('#' + e.currentTarget.id).serialize(), // Data to be sent
    success : function ( data )
    {
        alert ( data );
    },
    error   : function ( ajax_response )
    {
        alert ( ajax_response.responseText );
    }
});