Php JQuery Ajax失败并返回异常?

Php JQuery Ajax失败并返回异常?,php,jquery,ajax,zend-framework,Php,Jquery,Ajax,Zend Framework,我读过一些关于jqueryajax调用失败参数的文章,但没有一篇直接回答我的问题。如果你想了解我的出发点,这篇文章将是一个很好的开始: 我的问题是,有一些事情可能会导致我的应用程序失败——如果我的脚本返回false,那么上面的方法对我来说就可以了(如果我理解正确的话),但大多数时候,我的脚本会因为抛出我使用Zend框架处理的异常而失败。我更愿意返回异常,以便向用户提供更详细的消息。是否可以让我的PHP脚本返回一个值,同时仍然让Ajax调用知道它失败了?当然可以。首先,您需要对错误进行分类,例如

我读过一些关于jqueryajax调用失败参数的文章,但没有一篇直接回答我的问题。如果你想了解我的出发点,这篇文章将是一个很好的开始:


我的问题是,有一些事情可能会导致我的应用程序失败——如果我的脚本返回false,那么上面的方法对我来说就可以了(如果我理解正确的话),但大多数时候,我的脚本会因为抛出我使用Zend框架处理的异常而失败。我更愿意返回异常,以便向用户提供更详细的消息。是否可以让我的PHP脚本返回一个值,同时仍然让Ajax调用知道它失败了?

当然可以。首先,您需要对错误进行分类,例如:

  • 宿命
  • 例外情况
  • 错误/错误状态
我建议您使用作为返回值,以便正确且无错误地处理-0。在所有其他情况下,这将是一个错误

另一个有用的建议是将JSON用作客户机-服务器对话

在PHP中,它将是:

function prepareJSONResponse($code, $message, array $extra = array())
{
    return json_encode(array_merge(
        $extra, array(
            'code'    => (int) $code,
            'message' => $message)));
}
{code:1,message:'Not enough data passed','debug': true}
在这种情况下,您可以传递错误代码和消息,以及$extra中的其他参数,例如,此调用:

prepareJSONResponse(1, 'Not enough data passed', array('debug' => true));
服务器端的响应将是:

function prepareJSONResponse($code, $message, array $extra = array())
{
    return json_encode(array_merge(
        $extra, array(
            'code'    => (int) $code,
            'message' => $message)));
}
{code:1,message:'Not enough data passed','debug': true}
对于客户端,您需要一个$.ajax的包装函数:

// calback(result, error);
function call(url, params, callback)
{
    if (typeof params == 'undefined') {
        params = {};    
    }

    $.ajax({
        'type'      : "POST",
        'url'       : url,
        'async'     : true,
        'data'      : params,
        'complete'  : function(xhr) {
            if (xhr.status != 200) {
                if (typeof callback == 'function') {
                    callback(xhr.responseText, true);
                }
            } else {
                if (typeof callback == 'function') {
                    callback(xhr.responseText, false);
                }
            }
        }
    });
}
和函数来验证JSON,以便在出现损坏的格式时进行验证

function toJSON(data){
    try {
        data = JSON.parse(data);
    } catch (err) {
        data = { 'code' : -999, 'message' : 'Error while processing response' };
    }

    if (typeof data.debug != 'undefined') {
        console.log(data.debug);
    }

    return data;
}
使用try-catch代码,并在catch语句中执行以下操作:

try {
    ...
} catch (Exception $e) {
    exit(prepareJSONResponse(1, $e->getMessage(), array(
        'debug' => 'There was an error while I were processing your request')));
}
结果是,您将在浏览器控制台中接收调试信息,并可以处理错误/异常(prepareJSONResponse())和致命错误(通过读取HTTP状态头,如果不是200,则表示存在错误)


希望这就是你所问的。

相关帖子-你在这里帮了大忙。我衷心感谢你。