【问题标题】:Make PHP always respond with JSON, even when outputting errors使 PHP 始终以 JSON 响应,即使在输出错误时也是如此
【发布时间】:2015-12-23 12:52:16
【问题描述】:

场景:

对 PHP 脚本的 Ajax 调用。 JSON 格式的答案总是需要的。

问题:

在某些情况下(异常、错误等),不返回 Json,而是返回简单的纯文本。

问题:

无论如何,如何强制 PHP 始终返回 JSON?但没有关闭所有错误和警告?

我想到了类似的东西:

  • set_error_handler
  • set_exception_handler

如何强制解析错误等错误以输出 JSON 格式?

【问题讨论】:

  • 在ajax调用中使用contentType
  • 对于异常,您可以确保将所有代码包装在 try、catch 块中,并确保在捕获任何内容时输出 JSON。您应该始终尽可能检查错误并相应地处理它们。如果遇到错误,您可以更进一步并抛出异常,然后在您的 catch 块中捕获和处理这些错误
  • 您可以使用 try...catch...finally 块。更多信息在php.net/manual/en/language.exceptions.php。

标签: php json error-handling


【解决方案1】:

对于 PHP 5.x:
set_exception_handle 捕获异常
set_error_handler 捕获错误

没有办法捕捉解析错误。来自docs:

以下错误类型无法使用用户定义的函数处理:E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING 和大部分 E_STRICT

对于 PHP 7.x:

所有错误都是可捕获的,因此您可以将 php 脚本包装在

中
try {
    // your app here
} catch (Throwable $t) {
    // convert it to json
}

适用于任何 php 版本:

无法处理直接从 Web 服务器发送的响应,例如 404、504 等等。

您可以做的最好的事情是检查您的 javascript 中的响应代码,并且只处理 200 响应,您可以在您的 php 脚本中完美地控制它。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多