【发布时间】:2016-03-28 15:33:53
【问题描述】:
我正在使用 ajax 从网页获取 JSON 数据。所以我将responseType 设置为json。如果网页处理数据成功,返回一个有效的JSON字符串,就可以了。
但是如果网页失败,它会返回一个带有错误信息的JSON字符串,(对不起,误解,)它返回一个错误字符串,而不是一个json字符串,所以JavaScript无法识别它是有效的 JSON 字符串。所以如果我检查response,它是空的。在这种情况下,我想查看响应字符串并检查错误消息是什么。
var xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.open("POST", "/someEndpoint");
xhr.send();
xhr.onload = function() {
console.log(xhr.response);
}
(Fiddle to reproduce the issue.)
如果 /someEndpoint 返回有效的 JSON,则 xhr.response 是一个 JavaScript 对象。但是,如果它不是有效的 JSON(当端点响应错误消息时),那么我会在 xhr.response 中得到一个空对象。我无法访问 invalid-JSON 错误响应,因为访问 xhr.responseText 会出现错误:
未捕获的 DOMException:无法从“XMLHttpRequest”读取“responseText”属性:该值仅在对象的“responseType”为“”或“文本”(为“json”)时才可访问
使用responseType="json" 运行请求后,我不知道如何读取原始HTTP 响应,因为无法访问responseText。
【问题讨论】:
-
分享你的代码或小提琴
-
你试过用
JSON.parse(responseText)吗? -
您的错误是 JSON 格式吗?如果是,当然可以解析它。否则,您必须将其作为文本阅读(这也是可能的)
-
"它返回一个json字符串,里面有错误信息,所以javascript不能把它识别为有效的json字符串" 呃? JSON 是 JSON。如果 JavaScript 无法解析它,那么它一开始就是无效的 JSON。也许您的意思是响应只包含原始错误消息?
-
@FelixKling 我冒昧地编辑了一个代码示例,我认为它可以捕捉到 OP 的问题
标签: javascript json ajax