无法在jquery中访问返回的json

时间:2015-03-03 22:46:16

标签: javascript php jquery ajax json

这可能是我想念的简单事情,但我一直在谷歌上寻找答案,并没有任何工作。

我正在尝试做什么:

我正在对我的服务器进行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数组更高。在添加test =>之前我忘了删除它测试数据。

2 个答案:

答案 0 :(得分:6)

tl; dr:您无法访问data.test,因为您没有收到属性为test的对象。您要么输入错误的网址,要么生成的数据与您声明的数据不同。


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,这就是它的全部目的:

  

success回调传递返回的数据,该数据通常是JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()方法进行解析。

它也不是数组,因此您无法访问它的第一个元素(data[0])。

  

我已经尝试了一些方法来访问json数据,但是从“未定义的”,“未捕获的TypeError:无法读取属性...”到“未捕获的SyntaxError:意外的令牌o”等错误。

您遇到语法错误,因为您尝试将JavaScript解析为JSON。最简单的方法来复制错误:

> JSON.parse({});
 Uncaught SyntaxError: Unexpected token o

那是因为JSON.parse需要字符串。如果参数不是字符串,则将其转换为一个字符串。什么是转换为的对象?

> String({})
"[object Object]"

因此,您和JSON.parse("[object Object]")以及"[object Object]"的调用无效JSON。

答案 1 :(得分:0)

所以你的if如果它返回一个json作为字符串,那么你的数据是正常的 试试这段代码

var tempData = $.parseJSON(data);
$.each(tempData, function(k, v) {
    //display the key and value pair
    alert("key= " + k + "and value= "+ v);
});