У меня есть ответ JSON, но я не могу его проанализировать. Требуется помощь. Нет JQUERY Нет Прототип. Просто Javascript - PullRequest
2 голосов
/ 09 марта 2012

Итак, у меня возникли проблемы с JSON.

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

Я получаю UNDEFINED для data.length, а также цикл i не работает, потому что он не определен. Я думаю, я просто немного озадачен тем, как анализировать данные, которые я возвращаю из вызова JSON. Любая помощь приветствуется.

И ВЫИГРАЮЩИЙ ОТВЕТ

Создание массивов в 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);
   }
  }
 }

** Я надеюсь, что это поможет кому-то с полным решением, так как повсюду есть частичные сообщения. **

Ответы [ 2 ]

1 голос
/ 09 марта 2012
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 голос
/ 09 марта 2012

В основном {} это 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...