【发布时间】:2016-09-02 04:11:00
【问题描述】:
在我的 javascript 中,我有一个 jQuery ajax 获取请求:
$.get(uri, callback_function, 'json');
在firebug中,我可以看到响应头:
Content-Type application/json
回复内容:
{ "status": true, "data": "my test output" }
Net -> XHR 中甚至还有一个 JSON 选项卡,它显示返回的数据打印得非常漂亮。
但是,为什么我需要在我的回调函数中解析我得到的数据?
function callback_function(data) {
console.log(data); // { "status": true, "data": "my test output" }
// (printed in black)
console.log(data.status); // undefined
var parsedData = JSON.parse(data); // why is this needed??
console.log(parsedData); // Object { status=true, data="my test output"}
// (printed in colours)
console.log(parsedData.status); // true
}
来自文档:
https://api.jquery.com/jQuery.get/
jQuery.get( url [, data ] [, success ] [, dataType ] )
数据类型:字符串
服务器预期的数据类型。默认值:智能猜测(xml、json、脚本、文本、html)。
既然我既期待又得到一个 JSON 对象(请参阅 HTTP 响应标头),为什么我需要解析看起来只是字符串的内容?
【问题讨论】:
-
好问题。 jQuery 应该会自动为您执行此操作。需要明确的是:JSON 需要被解析,因为它只是文本,但是如果内容类型正确,jQuery 会自动解析。
-
它的击球手使用 $.ajax 方法和 dataType: json
-
我被旧版本的 jQuery 卡住了,所以它可能是库中的一个错误。但是我按照 Harsh Sanghani 的建议进行了尝试,但使用 $.ajax() 并没有遇到这个错误(?)。谢谢。