2012-02-13 342 views
1

我有一個CFC這就是返回一個JSON格式的查詢對象的JSON對象(從查詢),看起來是這樣的:最簡單的方式返回

{ 
"COLUMNS":["CMADDR","CMBILL","CMCRLIMIT","CMCRREVIEW","CMCRTERMS","CMCRUPDATE","CMCURR"], 
"DATA":[[1.2004856E7,3.2004856E7,0,"January, 01 1959 00:00:00","N\/30",null,"USD",null,false,false,false,"",0,"","US", ...], 
     [2.2045505E7,3.2004583E7,4000,"January, 01 1959 00:00:00","1\/10N30",null,"USD",null,false,false....]] 
} 

數據已經縮短只是爲了結構

但我收到一個json對象與列&數據。

什麼是使用jQuery訪問這些數據的最佳方式?請原諒我的經驗不足,因爲過去我只是使用了更簡單的結構,而且我通常自己定義它們,這樣CFC就會將此輸出返回給我,並且我不得不使用它並遍歷它並得到最終結果是一個數據表。

我試過以下,但得到了一個未定義的值爲止:

// ajax calls .. this is on success.. 
// ... 
function(data) { 
    //alert('got data back! \n'+data); 
    var obj = jQuery.parseJSON(data); 
    $.each(obj, function(index, itemData) { 
    $('#modal-table-listing > tbody:last').append('<tr>' + 
     '<td>[Select]</td>' + 
     '<td>'+ itemData.cmAddr +'</td>' + 
     '<td>'+ itemData.adName +'</td>' + 
     '<td>'+ itemData.adState +' - '+ itemData.adCity +' - '+ itemData.adZip +'</td></tr>'); 
    }); 

    console.log(obj); 
} 

我喜歡使用columns對象引用的相關數據,如果是有道理的。

回答

3

鑑於你的數據結構,你真的想循環通過obj.data。你返回的對象有兩個屬性。一個描述你的列,下一個是一組結果。

var obj = jQuery.parseJSON(data); 
$.each(obj.DATA, function(index, itemData) { 
$('tbody:last').append('<tr>' + 
    '<td>[Select]</td>' + 
    '<td>'+ itemData[0]+'</td>' + 
    '<td>'+ itemData[1] +'</td>' + 
    '<td>'+ itemData[2] +' - '+ itemData[3] +' - '+ itemData[4] +'</td></tr>'); 
}); 

我不知道在給定數據的情況下哪些列是哪個索引。但是你可以通過obj.columns.indexOf('CMADDR');或類似的東西弄明白,那會給你0

編輯 你也許可以很容易地編寫一個快速的地圖Underscore.js減少,達到您想要的格式。類似於

myData = _.map(obj.data, function(row){ 
      var item = {"column1" : row[0], 
         "column2" : row[1]}; 
       return item; 
      }); ` 

這將導致myData成爲具有命名屬性的對象數組。

+1

我接受了這一點,但結束了使用索引來引用返回的字段(結果是我減少了我的返回列到容易管理的東西)。我希望有一個快速/直接的方法來映射對象以使用列,而不包含'underscore.js'之類的東西,因爲我之前沒有使用過那個lib。 – Jakub 2012-02-15 18:10:56