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

时间:2015-02-17 18:50:59

标签: d3.js xmlhttprequest

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

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

但是,永远不会调用onLoad。回复为200 Ok,内容类型为application/json,正文为空

我怀疑这可以有所作为,因为否则类似的调用工作并调用'load'处理函数。

问题是:如何处理此案例?如何清楚地区分200 Ok与空体和真正的错误?

1 个答案:

答案 0 :(得分:3)

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

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

因此,虽然响应是200 ok,但只有在成功解析JSON时才会触发的加载事件 - 正确在空响应案例中不会触发。

您可以通过.on('error', ...)侦听器处理此情况。或者,您可以使用回调选项,例如在d3.json('/api/A', function(error, callback) {...})error在这种情况下预期为非空。

但是如果您仍想通过“成功”而不是“错误”路径检测空字符串,则可以切换到使用d3.xhr加载数据,并自行调用JSON.parse(您可以查看d3来源看看是怎么做的)。这样,您的代码可以根据需要选择解释任何响应。