2010-06-24 115 views
0

我無法解析來自我的應用程序的響應。下面是如何應對的JSON回來我最好的猜測通話...Jquery:處理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, 
    } 
}] 

盡我所能得到它說未定義。一旦。我正在嘗試設置一個用於爲Google地圖創建標記的循環。 我可以用另一雙眼睛。 有人嗎? 謝謝。

+0

感謝大家的貢獻。你們太棒了。 – mikewilliamson 2010-06-24 11:42:49

回答

4

由於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"..... 
+0

'h'是元素的**索引**,而不是元素。 – 2010-06-24 11:24:12

+0

@Felix - 完全錯過了當刪除其他,修正! – 2010-06-24 11:26:08

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

尼克已經說過,你應該如何訪問屬性。


參考:each()

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

+0

OP已經定義了'datatype:'json'',你的代碼將不起作用,因爲'h'包含元素的索引,而不是元素本身。 – 2010-06-24 11:26:45

+0

剛剛糾正,它應該是'dataType:'json''而不是'datatype:'json',' – 2010-06-24 11:29:06