将PHP错误发送到客户端的正确机制

时间:2010-04-07 14:09:03

标签: php ajax error-handling

问候,
我试图找到一种在Ajax-PHP系统中向客户端发送捕获的错误或业务逻辑异常的正确方法。在我的情况下,浏览器需要根据请求是否成功做出不同的反应。但是在我发现的所有示例中,在两种情况下都只向浏览器报告一个简单的字符串。例如:

if (something worked)
    echo "Success!";
else
    echo "ERROR: that failed";

因此,当浏览器返回Ajax响应时,知道是否发生错误的唯一方法是解析字符串(也许查找“错误”)。这看起来很笨重。

是否有更好/正确的方式来发回Ajax响应&通知浏览器错误?
谢谢。

5 个答案:

答案 0 :(得分:4)

您可以发回HTTP状态代码500(内部服务器错误),然后在正文中包含错误消息。然后,您的客户端AJAX库应该将其作为错误处理(并调用适当的回调等),而无需在响应中查找字符串。

答案 1 :(得分:1)

我通常会发回这样的JSON响应:

$response = array('status' => 'error', 'message' => 'an unknown error occured');

if( some_process() ) {
    $response['status'] = 'success';
    $response['message'] = 'Everything went better than expected.';
} else {
    $response['message'] = "Couldn't reticulate splines.";
}

die( json_encode($response) );

因此,我可以在JavaScript中检查response.status的状态,并查找“sucess”或“error”的值并正确显示response.message

答案 2 :(得分:1)

向用户显示正在发生的事情和发生的事情的状态非常重要。

我想构建你的ajax响应,你应该看看json格式。

if (something worked)
    echo '{ "error": 0 }';
else
    echo '{ "error": 1 }';

一旦踏入json世界,您将能够发送更多结构化输出。例如:

if (something worked)
    echo '{ "error": 0 }';
else
    echo '{ "error": 1, "code": 889, "desc": "Something bad happened" }';

当您在javascript中收到此输出时,您可以将其转换为对象并根据不同的键执行操作。

库json2.js将帮助您将输出转换为对象

答案 3 :(得分:1)

发送相应的http标头应该可以解决问题并告诉你的ajax脚本执行正确的回调。我知道的每个javascript框架都有成功和错误回调它的XHR请求。

header('HTTP/1.1 500 Internal Server Error');

答案 4 :(得分:1)

您可以发回一个JSON对象,其中包含自定义错误代码和错误消息,然后您可以直接处理或显示给您的用户:

{
     "response": 10,
     "message": "The database didn't work or something"
}

这也有助于成功:

{
     "response": 1,
     "message": "It worked! Yippee!"
}