如何处理来自WP rest API的格式错误的响应?

时间:2016-06-01 作者:Borek Bernard

Happy day scenario: 我实现了WP-restapi,该API将json发送到JavaScript客户端,后者对其进行解析并向用户显示数据。一切都很好。

What actually happens, inevitably: 一些WordPress代码或插件会生成一个PHP通知或警告,并且服务器被配置为使这个垃圾找到JSON响应的路径。(WP REST APItries to avoid that 但例如,如果ini_set() 服务器配置不允许,但仍可能发生。)

一种方法是简单地将其归咎于用户——如果他们的服务器配置为在生产中发送PHP通知和警告,那肯定是不好的。然而,即使核心REST基础设施也试图支持服务器配置不好的用户,在这种情况下,这也是我的目标。

是否制定了处理此问题的技术?我可以看到两种方式:

在JavaScript中检测响应格式错误,显示一些错误并拒绝工作123, 它会被包装成一个像{ "__VALID__": true, "data": 123 } JS代码将使用response.body.data 而不是response.body.

3 个回复
SO网友:Ernest

如果要创建类,构造中的第一件事就是这样。或者你可以尽早采取行动。可能加载了plugins\\u。

/*
     * If WP DEBUG is not on do NOT return any php warning, notices, and/or fatal errors.
     * Well If it is a fatal error then this return is FUBAR anyway...
     * We do this because some badly configured servers will return notices and warnings switch get prepended or appended to the rest response.
     */
    if( defined(\'WP_DEBUG\') ){
        if( false === WP_DEBUG ){
            error_reporting(0);
        }
    }

SO网友:Mark Kaplun

您无法在自己的插件中修复由软件其他部分引起的一般问题,因为存在太多的可能性。如果网站所有者希望能够使用其他插件/主题,那么他有责任运行干净的操作。

唯一合理的方法可能是将此类响应记录在浏览器控制台中,这样当插件用户投诉时,您就可以更容易地找出事情不起作用的原因。

SO网友:AntonChanning

您需要结合使用exception catching and a custom error handler.

如果使用此选项来抑制最终用户的错误,则可能需要添加一些方法,将错误标记给管理员/开发人员/您自己,这样您至少可以知道这个问题。

或者,您可以向客户端返回一个包含返回值和任何错误数组的对象,而不是抑制错误。然后由客户决定是否对该信息做了任何处理。是否要这样做取决于客户机是谁,以及这些错误可能会暴露哪些敏感信息。当然,您可以完全控制输出内容,不需要逐字逐句地输出通知。