2014-09-15 2 views
0

Я пытаюсь выполнить json с jQuery ajax. По какой-то причине это не позволяет мне это делать. Я получил json от PHP, и я JSON.stringify, потому что он возвращал мне объекты. Но теперь в цикле for в javascript мне нужно $ htmlvalue [i], чтобы я мог анализировать данные.Loop via json

Спасибо за помощь. Надеюсь, я описал это право.

PHP FILE:

<?php 
    $nfl = simplexml_load_file('http://www.nfl.com/liveupdate/scorestrip/ss.xml'); 


    $items = array(); 
    foreach ($nfl->gms->g as $game) { 
     foreach($game->attributes() as $a => $b) { 
      $items[] = $a; 
      $items[] = $b; 
     } 
    } 
    echo json_encode($items); 
?> 

Javascript FILE:

$.ajax({ 
    type:"post", 
    url: "nfl.php", 
    dataType: "JSON", 
     success: function(response){ 
      var $data = response, 
       $htmlvalue = ''; 
      $htmlvalue = JSON.stringify($data.length); 
      for(i=0; i < $htmlvalue.length; i++){ 
      console.log('<h4>' +$htmlvalue[i].eid + "</h4>"); 
      } 
     }, 
     error: function(){ 
      console.log("error"); 
     } 
    }); 

Ответ сервера:

["eid",{"0":"2014091100"},"gsis",{"0":"56186"},"d",{"0":"Thu"},"t",{"0":"8:25"},"q",{"0":"F"},"h",{"0":"BAL"},"hnn",{"0":"ravens"},"hs",{"0":"26"},"v",{"0":"PIT"},"vnn",{"0":"steelers"},"vs",{"0":"6"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091400"},"gsis",{"0":"56187"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"BUF"},"hnn",{"0":"bills"},"hs",{"0":"29"},"v",{"0":"MIA"},"vnn",{"0":"dolphins"},"vs",{"0":"10"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091401"},"gsis",{"0":"56188"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"CAR"},"hnn",{"0":"panthers"},"hs",{"0":"24"},"v",{"0":"DET"},"vnn",{"0":"lions"},"vs",{"0":"7"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091402"},"gsis",{"0":"56189"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"CIN"},"hnn",{"0":"bengals"},"hs",{"0":"24"},"v",{"0":"ATL"},"vnn",{"0":"falcons"},"vs",{"0":"10"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091403"},"gsis",{"0":"56190"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"CLE"},"hnn",{"0":"browns"},"hs",{"0":"26"},"v",{"0":"NO"},"vnn",{"0":"saints"},"vs",{"0":"24"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091404"},"gsis",{"0":"56191"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"MIN"},"hnn",{"0":"vikings"},"hs",{"0":"7"},"v",{"0":"NE"},"vnn",{"0":"patriots"},"vs",{"0":"30"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091405"},"gsis",{"0":"56192"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"NYG"},"hnn",{"0":"giants"},"hs",{"0":"14"},"v",{"0":"ARI"},"vnn",{"0":"cardinals"},"vs",{"0":"25"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091406"},"gsis",{"0":"56193"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"TEN"},"hnn",{"0":"titans"},"hs",{"0":"10"},"v",{"0":"DAL"},"vnn",{"0":"cowboys"},"vs",{"0":"26"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091407"},"gsis",{"0":"56194"},"d",{"0":"Sun"},"t",{"0":"1:00"},"q",{"0":"F"},"h",{"0":"WAS"},"hnn",{"0":"redskins"},"hs",{"0":"41"},"v",{"0":"JAC"},"vnn",{"0":"jaguars"},"vs",{"0":"10"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091408"},"gsis",{"0":"56195"},"d",{"0":"Sun"},"t",{"0":"4:05"},"q",{"0":"F"},"h",{"0":"SD"},"hnn",{"0":"chargers"},"hs",{"0":"30"},"v",{"0":"SEA"},"vnn",{"0":"seahawks"},"vs",{"0":"21"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091409"},"gsis",{"0":"56196"},"d",{"0":"Sun"},"t",{"0":"4:05"},"q",{"0":"F"},"h",{"0":"TB"},"hnn",{"0":"buccaneers"},"hs",{"0":"17"},"v",{"0":"STL"},"vnn",{"0":"rams"},"vs",{"0":"19"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091410"},"gsis",{"0":"56197"},"d",{"0":"Sun"},"t",{"0":"4:25"},"q",{"0":"F"},"h",{"0":"DEN"},"hnn",{"0":"broncos"},"hs",{"0":"24"},"v",{"0":"KC"},"vnn",{"0":"chiefs"},"vs",{"0":"17"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091411"},"gsis",{"0":"56198"},"d",{"0":"Sun"},"t",{"0":"4:25"},"q",{"0":"F"},"h",{"0":"GB"},"hnn",{"0":"packers"},"hs",{"0":"31"},"v",{"0":"NYJ"},"vnn",{"0":"jets"},"vs",{"0":"24"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091412"},"gsis",{"0":"56199"},"d",{"0":"Sun"},"t",{"0":"4:25"},"q",{"0":"F"},"h",{"0":"OAK"},"hnn",{"0":"raiders"},"hs",{"0":"14"},"v",{"0":"HOU"},"vnn",{"0":"texans"},"vs",{"0":"30"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091413"},"gsis",{"0":"56200"},"d",{"0":"Sun"},"t",{"0":"8:30"},"q",{"0":"F"},"h",{"0":"SF"},"hnn",{"0":"49ers"},"hs",{"0":"20"},"v",{"0":"CHI"},"vnn",{"0":"bears"},"vs",{"0":"28"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"},"eid",{"0":"2014091500"},"gsis",{"0":"56201"},"d",{"0":"Mon"},"t",{"0":"8:30"},"q",{"0":"P"},"h",{"0":"IND"},"hnn",{"0":"colts"},"hs",{"0":"0"},"v",{"0":"PHI"},"vnn",{"0":"eagles"},"vs",{"0":"0"},"rz",{"0":"0"},"ga",{"0":""},"gt",{"0":"REG"}] 
+2

Вам нужно разобрать его, а не строчить его. Замените 'JSON.stringify' на' JSON.parse'. –

+0

Когда JSON.parse данные, он выдает мне сообщение об ошибке: Uncaught SyntaxError: Неожиданный токен e – dowomenfart

+0

Можете ли вы обновить пример того, что возвращает ваш сервер? – TJC

ответ

0

Вы должны изменить способ преобразования данных XML в массив JSON. Теперь это не в формате, который вы пытаетесь обработать своим JavaScript.

$items = array(); 
foreach ($nfl->gms->g as $game) { 
    $row = array(); 
    foreach ($game->attributes() as $a => $b) { 
     $row[$a] = (string) $b; 
    } 
    $items[] = $row; 
} 

echo json_encode($items); 

Следующий шаг удаляет JSON.stringify, потому что вы хотите прочитать свой ответ как массив, а не как строку. Использование JSON.parse не требуется, потому что вы уже передали информацию о формате ответа в $.ajax, используя dataType: "JSON".

Если он по-прежнему не работает, проверьте свой ответ на консоли и дайте результаты здесь. Было бы также полезно использовать $.each() вместо for(), так как будет проще читать этот массив.

+0

Святое, дерьмо это сработало! Потрясающие! Благодаря! – dowomenfart

+0

Если я могу задать вопрос. Что такое (строка). Просто любопытно. – dowomenfart

+1

Он передает объект (в данном случае SimpleXML Object) в строку.Требуется удалить любую информацию об объекте и получить чистую строку. – marian0

0

JSON вы пытаетесь разобрать не в формате, который легко интерпретируемое в меняющие объекты. JSON, который вы предоставили, представляет собой массив смешанных объектов, некоторые строки, например. «eid», а некоторые - объекты, например. {"0": "2014091100"}. Ваша проблема заключается в том, что вы пытаетесь выталкивать данные в формат, который не подходит. Данные уже отформатированы, так как это XML, обрабатывают данные как XML и не пытаются и вымывают их в JSON.

+0

Это хороший момент ... HTML-синтаксический анализ в jQuery также должен работать и для XML: http://api.jquery.com/jQuery/. С другой стороны, я лично предпочитаю JSON. Я думаю, что XML - это немного историческое наследие: оно эволюционировало из HTML, и хранение информации, подобной этой, имеет смысл для веб-страниц (которые имеют текст с чередованием разметки), но не для данных. Насколько мне известно, если вы конвертируете в JSON, вы наносите удары по плохо структурированному формату данных. –