这可能是我所缺少的简单内容,但我一直在谷歌上搜索寻找答案,但没有得到任何有用的东西。
我正在尝试做的事情:
我正在对我的服务器进行 ajax 调用以获取一些作为 json 返回的简单数据
我遇到的问题:
我已经尝试了几种方法来访问 json 数据,但得到的错误范围从“未定义”、“未捕获的类型错误:无法读取属性...”到“未捕获的语法错误:意外的 token o”。
我尝试过的:
这是 jquery (v1.11.1) ajax 调用:
$.getJSON(ajax_url, function(data){
// I've tried the commented out items below
// var data = $.parseJSON(data);
// var data = JSON.parse(data);
// var data = data[0];
alert(data.test);
});
为了让事情变得 super 简单,我尝试访问以下 php 返回的非常简单的 json,但未能成功:
header('Content-Type: application/json');
$test = array('test' => 'test data');
echo json_encode($test);
exit;
在有人问之前,我已经仔细检查以确保 ajax_url 正在访问正确的页面,方法是将 url 记录到 js 控制台,并通过在脚本运行时创建错误日志条目来记录 php 端的访问打电话。
我想要什么:
如果有人能让我知道我做错了什么,以及我如何轻松地从返回的“测试”键中获取“测试数据”,我会很高兴。
编辑:
运行 console.log(data) 会得到以下信息:
Object {success: "true"}
编辑编辑:
问题在我的实际脚本中呼应了 success => true array higher。我在添加测试=>测试数据之前忘记删除它了。
最佳答案
tl;dr:您无法访问 data.test
,因为您没有收到具有属性 test
的对象。要么您访问了错误的 URL,要么您生成的数据与您声称的不同。
console.log(data)
输出 Object {success: "true"}
的事实告诉你 data
是一个 JavaScript目的。证明:
> console.log({success: true});
Object {success: true}
如果它是一个包含 JSON 的字符串,您会看到:
> console.log('{"success": true}');
{"success": true}
因此,data
是一个具有单个属性的对象,success
。您可以通过 data.success
访问成功值。它不是包含 JSON 的字符串,因此您无法解析它。事实上,$.getJSON
已经为您解析 JSON,这就是它的全部目的:
The
success
callback is passed the returned data, which is typically a JavaScript object or array as defined by the JSON structure and parsed using the$.parseJSON()
method.
它也不是数组,因此您无法访问它的第一个元素 (data[0]
)。
I've tried a few methods to access the json data, but have gotten errors ranging from "undefined", "Uncaught TypeError: Cannot read property...", to "Uncaught SyntaxError: Unexpected token o".
您遇到语法错误是因为您试图将 JavaScript 解析为 JSON。复制错误的最简单方法:
> JSON.parse({});
Uncaught SyntaxError: Unexpected token o
那是因为 JSON.parse
需要一个 string。如果参数不是字符串,则将其转换为一个。对象转换成什么?
> String({})
"[object Object]"
所以你和调用 JSON.parse("[object Object]")
和 "[object Object]"
不是有效的 JSON。
关于javascript - 无法在 jquery 中访问返回的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843505/