javascript - 无法在 jquery 中访问返回的 json

标签 javascript php jquery ajax json

这可能是我所缺少的简单内容,但我一直在谷歌上搜索寻找答案,但没有得到任何有用的东西。

我正在尝试做的事情:

我正在对我的服务器进行 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/

相关文章:

javascript - Leap Motion JS - 后台更新

javascript - 在xcode中使用phonegap的alert()与notification.alert()之间有区别吗?

php - 为什么结果等于 0,有时等于 1 - shell_exec('pgrep -f

php - 一个连接可以获取另一个连接的详细信息吗?或者,我怎样才能获得最详细的待处理交易报告?

javascript - 动态路径变量来播放音频.mp3 文件 如何? d3 javascript CoffeeScript

javascript - Google Chrome 自定义 URI 方案重定向到 JS

javascript - 如何通过JSON在MySQL中插入Date类型变量

PHP无限循环问题

javascript - onclick模态按钮调用php函数

c# - 为什么 jQuery $.ajax 运行速度非常慢?