我正在使用D3发出XHR请求:
d3.json('/api/A').post('...').on('load', onLoad)
但是,永远不会调用onLoad
。回复为200 Ok
,内容类型为application/json
,正文为空。
我怀疑这可以有所作为,因为否则类似的调用工作并调用'load'
处理函数。
问题是:如何处理此案例?如何清楚地区分200 Ok
与空体和真正的错误?
答案 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来源看看是怎么做的)。这样,您的代码可以根据需要选择解释任何响应。