我有一个php脚本,它从数据库中读取记录并返回一个json对象。我在脚本中有错误处理,因此如果抛出异常或发生其他错误,我仍然会返回格式正确的json响应(带有错误代码和所有错误)。这有效。
然而:如果PHP觉得它有话要说,它在发送json响应之后仍然会说出来。这打破了客户端的json解析器。因此,代替ajax调用成功并显示错误消息,例如“未找到数据库文件”,调用失败并出现json解析器错误,这没有用(因为它会覆盖原始的,保留的错误信息):
SyntaxError: JSON.parse: unexpected non-whitespace character
after JSON data at line 1 column 120 of the JSON data
我可以用 error_reporting(0)来抑制PHP的消息 - 但是有更好的方法吗?代码(大纲)如下:
<?php
header('Content-type: application/json');
const RESP_OK = 0;
const RESP_EXCEPTION = 1;
try {
// do the database stuff and build $response
$response['exitcode'] = RESP_OK;
} catch ( Exception $e ) {
// put error info in the response
$response['exitcode'] = RESP_EXCEPTION;
$response['error'] = 'code: ' . $e->getCode() . ' (line ' .
$e->getLine() . ') message: ' . $e->getMessage();
} finally {
// always send back a response
echo json_encode( $response );
error_reporting(0);
// also close the db here etc.
}
?>
答案 0 :(得分:2)
错误报告是一种调试功能,因此它可以/应该/将在生产环境中关闭,而不是在开发中关闭。
您应该以这样的方式为您编写代码,使代码涵盖所有代码。
分析每个错误和警告,现在看看这可以通过'PHP不觉得它有话要说'的方式来处理。