2012-03-09 35 views
2

所以我有一些與JSON issus。我有一個JSON響應,但無法解析它。需要幫助。沒有JQUERY沒有原型。只是Javascript

setupdata({"NON-RELIGOUS ORGANIZATIONS":{"23":["NON-RELIGOUS ORGANIZATIONS","Does this Loce test 2","",null]},"YARD SALES":{"1":["YARD SALES","yard sale","1332599400",null],"22":["YARD SALES","LOCKING TEST YARD SALE a change and more","1331814600",null],"21":["YARD SALES","Generic Yard Sale Title","",null]}}) 

我正與....

function setupdata(data){ 

    alert(data.length); 
    for(i=0; i<data.length; i++) { 
    newdiv = document.createElement("DIV"); 
    newdiv.setAttribute("id","cat"+i); 
    newdiv.innerHTML(\'test\'); 
    document.getElementById(\'divmiddle\').appendChild(newdiv); 
    } 
} 

我得到未定義的data.length,也是i循環沒有運行,因爲它是不確定的處理它。我想我只是對如何解析從JSON調用返回的數據感到困惑。任何幫助apprecciated。

,並且贏取的答案是

PHP創建的數組:

while($getcats = mysqli_fetch_array($query)){ 
$layout[$getcats[news_cat_name]]; 
if(!$getstories = mysqli_query($connection,"SELECT news_id,news_title,news_organization,news_expiration from news_items where news_category='$getcats[news_cat_id]'")){ echo mysqli_error($connection);} 
while($looptitles=mysqli_fetch_array($getstories)){ 

$layout[$getcats[news_cat_name]][$looptitles[news_id]][]=date("m/d/y G:i a",$looptitles[news_expiration]); 

$layout[$getcats[news_cat_name]][$looptitles[news_id]][]=$looptitles[news_title]; 

$layout[$getcats[news_cat_name]][$looptitles[news_id]][]=$looptitles[news_organization]; 

} 
} 

並將所得JSON

setupdata({"NON-RELIGOUS ORGANIZATIONS":{"23":[false,"Does this Loce test 2","2"]}, 
"YARD SALES":{ 
    "1":["03\/24\/12 10:30 am","yard sale","0"] 
    ,"22":["03\/15\/12 8:30 am","LOCKING TEST YARD SALE a change and more","0"], 
    "21":[false,"Generic Yard Sale Title","0"]}}) 

及JS解析JSON

for(var key in data){//OUTER LOOP FOR THE MAIN OBJECTS 
    divkey = document.createElement("DIV"); 
    divkey.setAttribute("id",key); 
    divkey.style.fontSize = \'13px\'; 

    divkey.style.textDecoration = \'underline\'; 
    divkey.style.paddingTop = \'3px\'; 
    divkey.style.paddingBottom = \'5px\'; 
    divkey.style.position = \'relative\'; 
    divkey.innerHTML = key; 
     document.getElementById(\'divmiddle\').appendChild(divkey); 

    for(var mykey in data[key]){//INNER LOOP FOR THE INNER OBJECTS 
     divkey = document.createElement("DIV"); 
    divkey.setAttribute("id",mykey); 
     divkey.style.fontFamily = \'Verdana\'; 
     divkey.style.fontSize = \'11px\'; 
    divkey.style.paddingBottom = \'5px\'; 

    divkey.style.position = \'relative\'; 
    divkey.innerHTML = +data[key][mykey][1]+\' -- \' + data[key][mykey][0]; 
     document.getElementById(\'divmiddle\').appendChild(divkey); 
    } 
    } 
} 

**我希望這可以幫助別人了一個完整的解決方案,因爲有部分貼子所有的地方。**

+0

警報(數據[ 「NON-RELIGOUS組織」] [ 「23」]長度); – 2012-03-09 04:22:40

+1

是你的實際代碼中的反斜槓,還是那些只是潛入這篇文章莫名其妙? – 2012-03-09 04:33:33

+0

是的那些是反斜槓,因爲我應對了生成的PHP文件.... – BostonMacOSX 2012-03-09 15:05:13

回答

1
setupdata({ "NON-RELIGOUS ORGANIZATIONS": { "23": ["NON-RELIGOUS ORGANIZATIONS", "Does this Loce test 2", "", null] }, "YARD SALES": { "1": ["YARD SALES", "yard sale", "1332599400", null], "22": ["YARD SALES", "LOCKING TEST YARD SALE a change and more", "1331814600", null], "21": ["YARD SALES", "Generic Yard Sale Title", "", null]} }); 
    function setupdata(data) { 
     alert(JSON.stringify(data)); 
     alert(data.length); 
     for (var key in data) { 
      alert(JSON.stringify(data[key]['23'])); 
      newdiv = document.createElement("DIV"); 
      newdiv.setAttribute("id", "cat" + data[key]['23']); 
      newdiv.innerHTML = 'test'; 
      document.getElementById('divmiddle').appendChild(newdiv); 
     } 
    } 
1

基本上{}Object不是Array所以它沒有length財產。

但你可以遍歷它

for (var key in data) { 
    // your code .... 
} 

編輯:回答你的評論

,您仍然可以使用由單純的Object在使用這種樣式

{'data': { /* your json data */ }} // when there's data 
{'data': null}      // when no data available 

然後你的功能。

if (data.data) { 
    for(var key in data.data) { 
     // your code 
    } 
} 
+0

那麼我應該改變方法來返回數組而不是對象? – BostonMacOSX 2012-03-09 16:27:07

+0

@BostonMacOSX你仍然可以使用「對象」。這裏是我的方法 ' {「數據」:{/ *你的JSON數據* /}} //當有數據 {「數據」:空} //如果沒有可用的 ' 然後在你的代碼,你可以將數據只需檢查 ' if(data.data){ //您的代碼 } ' – Rezigned 2012-03-12 03:51:06

相關問題