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 源代码以了解它是如何完成的)。这样,您的代码就可以选择根据您的意愿解释任何响应。
我正在使用 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 源代码以了解它是如何完成的)。这样,您的代码就可以选择根据您的意愿解释任何响应。