Jquery:处理json响应?
我在解析应用程序的响应时遇到问题。 这是我最好的猜测,如何处理json回来…
$.ajax({ url: 'houses.json', method: 'GET', datatype: 'json', success: function (data) { $.each(data, function (h) { $(h).each(function () { console.log(h.address); }); }); });
以下是我从服务器返回的响应:
[{ "house": { "address": "7 view st dunedin nz", "lng": 170.500908, "id": 3, "lat": -45.875059 } }, { "house": { "address": "26 brown st dunedin nz", "lng": 170.496236, "lat": -45.875834, } }]
我能得到的最好的就是让它说未定义。 一旦。 我正在尝试设置一个循环来为谷歌地图创建标记。 我可以用另一双眼睛。 任何人? 谢谢。
由于h
是一个数组,你需要沿着属性链, h
是一个具有address
属性的house
对象的集合,所以改变它一点,如下所示:
$.each(data, function(i, h){ console.log(h.house.address); });
确保删除周围的额外循环,没有必要,因为只有一个数组。
这是一种可视化的方式来思考它:
h h.house h.house.address [ { "house":{ "address":"7 view st dunedin nz".....
each
回调中的第一个参数是索引,因此您需要两个参数:
$.ajax({ url: 'houses.json', method: 'GET', datatype: 'json', success: function(data){ $.each(data, function(i, item){ $.each(item, function(j, house){ console.log(house.address); }); }); });
或者,您可以使用将项目设置为回调的上下文的事实,因此您可以使用this
关键字来访问它:
$.ajax({ url: 'houses.json', method: 'GET', datatype: 'json', success: function(data){ $.each(data, function(){ $.each(this, function(){ console.log(this.address); }); }); });
内部循环将遍历对象中的属性,该属性只有一个。 您可以直接访问酒店:
$.ajax({ url: 'houses.json', method: 'GET', datatype: 'json', success: function(data){ $.each(data, function(){ console.log(this.house.address); }); });
应该是这样的
$.ajax({ url: 'houses.json', method: 'GET', dataType: 'json', success: function(data){ $.each(data, function(h){ console.log(h.house.address); });
注意dataType: 'json',
和console.log(h.house.address);
部分。
这是因为,您将回调函数定义为function(h)
思维, h
是数组中的对象。 但事实并非如此,它是元素的索引 。
只需保留参数并使用this
(指向元素):
$.each(data, function(){ console.log(this.house.address); });
或定义两个参数:
$.each(data, function(index, element){ console.log(element.house.address); });
或通过索引访问数组:
$.each(data, function(h){ console.log(data[h].house.address); });
尼克已经说过,你应该如何访问这些房产。
参考: each()