问候,
我试图找到一种在Ajax-PHP系统中向客户端发送捕获的错误或业务逻辑异常的正确方法。在我的情况下,浏览器需要根据请求是否成功做出不同的反应。但是在我发现的所有示例中,在两种情况下都只向浏览器报告一个简单的字符串。例如:
if (something worked)
echo "Success!";
else
echo "ERROR: that failed";
因此,当浏览器返回Ajax响应时,知道是否发生错误的唯一方法是解析字符串(也许查找“错误”)。这看起来很笨重。
是否有更好/正确的方式来发回Ajax响应&通知浏览器错误?
谢谢。
答案 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!"
}