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()