【发布时间】:2015-05-04 19:04:43
【问题描述】:
这可能是我缺少的一些简单的东西,但我一直在谷歌上寻找答案,但没有任何工作。
我想做的事:
我正在对我的服务器进行 ajax 调用,以获取一些以 json 格式返回的简单数据
我遇到的问题:
我尝试了几种访问 json 数据的方法,但得到的错误范围从“未定义”、“未捕获的 TypeError:无法读取属性...”到“未捕获的 SyntaxError:意外的令牌 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);
});
为了让事情变得超级简单,我尝试访问以下 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"}
编辑编辑:
问题是在我的实际脚本中回显成功 => true 数组。在添加测试 => 测试数据之前我忘了删除它。
【问题讨论】:
-
从console.log(data)开始
-
如何提醒
alert(JSON.stringify(data)) -
data是一个具有单个属性的对象,success。您可以通过data.success访问成功值。它不是包含 JSON 的字符串,因此您无法解析它。事实上,$.getJSON已经为你解析了 JSON,这就是它的全部目的。它也不是一个数组,所以你不能访问它的第一个元素 (data[0])。您似乎没有从您声称的 PHP 脚本中返回数据。 -
@rmmoul:
console.log(data)输出Object {success: "true"}的事实证明data是一个JavaScript 对象。如果你不相信我,请console.log(typeof data)。$.getJSON已经为您解析 JSON。这就是$.getJSON所做的。 -
哦,我知道 PHP 脚本返回 JSON。我的意思是
data已经是解析后的响应。$.getJSON的全部目的是为你解析 JSON,这样你就不用再做这些了。
标签: javascript php jquery ajax json