我需要能够从我正在制作的应用程序中检索和显示网站的JSON数据。在将它实现到我的应用程序之前,我认为我应该通过在其他地方测试它来确保我理解它是如何工作的。我制作了以下HTML和JSON代码来测试它,但如果我运行应用程序,我得到Uncaught TypeError:无法在文件中读取未定义的属性'0':///android_asset/www/projectName.html:11 我做错了什么?
HTML:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$.get('testData.json', function(data) {
alert('get performed');
var obj = eval ("(" + data + ")");
$("p").html(obj.data_set[0].data1);
});
});
});
</script>
</head>
<body>
<h2>Heading</h2>
<p>Display</p>
<button>Click me</button>
</body>
</html>
JSON文件:
[{"data_set":{"data1":"string","data2":null,"data3":22.0}}]
答案 0 :(得分:0)
将$.get
更改为$.getJSON
或在$ .get中设置数据类型,如下所示
<强>更新强>
我也意识到你没有像这样正确地解析json
$.get('testData.json', function(data) {
alert('get performed');
$("p").html(obj[0].data_set.data1);
},'json');
答案 1 :(得分:0)
您使用的是eval
,这是不必要的。我建议你阅读what JSON is and how to use it。
您不需要在eval
上使用data
,因为它已经是JSON对象。您的代码存在的问题是,您尝试将data_set
作为data
的属性进行访问。但是,data
实际上是一个数组,有一个未命名的对象。该对象具有成员data_set
。反过来,data_set
是一个对象,而不是一个数组,所以你不能使用data_set[0]
。你想要有类似的东西:
$(document).ready(function(){
$("button").click(function(){
$.getJSON('testData.json', function(data) {
alert('get performed');
$("p").html(data[0].data_set.data1);
});
});
});
答案 2 :(得分:0)
请参阅此jsFidle:http://jsfiddle.net/7Uxtg/
我包含了一些遍历整个数据结构的代码(不只是一条可能的路径)。拿你需要的部分; - )
$(document).ready(function () {
$("button").click(function () {
$.ajax({
url: '/gh/gist/response.json/37ab4c69a04628428ce2',
dataType: 'json',
success: function (json) {
// to display everything
/*$.each(json, function (k, v) {
$.each(v.data_set, function (key, value) {
$('p').append(value);
});
});*/
// to display just the string
$('p').html(json[0].data_set.data1);
}
});
});
});