这可能是我想念的简单事情,但我一直在谷歌上寻找答案,并没有任何工作。
我正在尝试做什么:
我正在对我的服务器进行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 =>之前我忘了删除它测试数据。
答案 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);
});