d3.xhr - 处理成功的空响应

d3.xhr - handling successful empty response

我正在使用 D3 发出 XHR 请求:

d3.json('/api/A').post('...').on('load', onLoad)

然而,onLoad 从未被调用。回复是 200 Ok,内容类型是 application/json,正文是 empty

我怀疑这会有所不同,因为在其他方面类似的调用会起作用并调用 'load' 处理函数。

问题是:如何处理这种情况?如何清楚地区分空体的200 Ok和真正的错误?

空响应无效 JSON(与空对象或数组相反, 构成有效 json)。

这可以使用 http://jsonlint.com/ 或在控制台中通过 运行 JSON.parse('') 进行验证,这会引发错误。

因此,虽然响应是 200 ok,但加载事件 — 只有在成功解析 JSON 时才会触发 — 正确地 不会在空响应情况下触发。

您可以通过 .on('error', ...) 侦听器处理这种情况。或者,您可以使用回调选项,如 d3.json('/api/A', function(error, callback) {...}) 中那样,在这种情况下,error 应该是非空的。

但是如果您仍然想通过 "success" 而不是 "error" 路径检测空白字符串,您可以改为使用 d3.xhr 加载数据,然后调用 JSON.parse 你自己(你可以查看 d3 源代码以了解它是如何完成的)。这样,您的代码就可以选择根据您的意愿解释任何响应。