Jquery:处理json响应?

时间:2010-06-24 11:11:53

标签: 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,
  }
}]
我能得到的最好的就是让它说未定义。一旦。我正在尝试设置一个循环来为谷歌地图创建标记。 我可以用另一双眼睛。 任何人? 感谢。

4 个答案:

答案 0 :(得分:4)

由于h是一个数组,您需要沿着属性链向下,h是具有house属性的address个对象的集合,因此请更改它有点像这样:

   $.each(data, function(i, h){
     console.log(h.house.address);
   });

确保删除周围的额外循环,因为只有一个数组,所以不需要。

这是一种可视化的方式来考虑它:

   h       h.house           h.house.address
 [ {       "house":{         "address":"7 view st dunedin nz".....

答案 1 :(得分:0)

这是因为,您将回调函数定义为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);
});

Nick已经说过,你应该如何访问这些属性。


参考:each()

答案 2 :(得分:0)

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);
    });
});

答案 3 :(得分:0)

应该是

$.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);部分。