2014-09-15 4 views
0

J'essaye de boucler json avec jQuery ajax. Pour une raison quelconque, cela ne me permet pas de le faire. J'ai reçu le json de PHP et je le JSON.stringify parce qu'il était en train de me rendre des objets. Mais, maintenant sur la boucle for en javascript j'ai besoin de $ htmlvalue [i] pour que je puisse analyser les données.Loop through json

Merci pour l'aide. J'espère avoir décrit ce droit.

PHP FICHIER:

<?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 FICHIER:

$.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"); 
     } 
    }); 

Réponse du serveur:

["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

Vous devez l'analyser et non le stringifier. Remplacez 'JSON.stringify' par' JSON.parse'. –

+0

Lorsque JSON.parse les données il me jette une erreur disant: Uncaught SyntaxError: Jeton inattendu e – dowomenfart

+0

pouvez-vous mettre à jour avec un exemple de ce que votre serveur est de retour? – TJC

Répondre

0

Vous devez changer un moyen de convertir vos données XML en tableau JSON. Maintenant, ce n'est pas au format que vous essayez de gérer avec votre 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); 

L'étape suivante est la suppression JSON.stringify, parce que vous voulez lire votre réponse sous forme de tableau, et non pas sous forme de chaîne. L'utilisation de JSON.parse ne devrait pas être nécessaire, car vous avez déjà transmis des informations sur le format de réponse dans l'appel $.ajax en utilisant dataType: "JSON".

Si cela ne fonctionne toujours pas, vérifiez votre réponse dans la console et fournissez des résultats ici. Il serait également bon d'utiliser $.each() au lieu de for(), car il sera plus facile de lire ce tableau.

+0

Saint, merde cela a fonctionné! Impressionnant! Merci! – dowomenfart

+0

Si je peux poser une question. Qu'est-ce que la (chaîne) fait. Juste curieux. – dowomenfart

+1

Il convertit l'objet (dans ce cas SimpleXML Object) en chaîne.Il est nécessaire de supprimer toutes les informations sur l'objet et obtenir une chaîne propre. – marian0

0

JSON que vous essayez d'analyser n'est pas dans un format qui est facilement analysable dans des objets insignifiants. le JSON que vous avez fourni est un tableau d'objets mixtes, certaines chaînes, par ex. "eid" et certains sont des objets, par ex. {"0": "2014091100"}. Votre problème est que vous essayez de falsifier les données dans un format qui ne convient pas vraiment. Les données sont déjà formatées comme c'est le XML, traitent les données comme XML et n'essayent pas de les fudge dans JSON

+0

C'est un bon point ... Les trucs d'analyse HTML dans jQuery devraient aussi fonctionner pour XML: http://api.jquery.com/jQuery/. D'un autre côté, je préfère personnellement JSON. Je pense que XML est un peu un héritage historique: il a évolué à partir du HTML, et stocker des informations comme celles-ci avec des tags est logique pour les pages Web (qui ont du texte intercalé avec le balisage) mais pas pour les données. En ce qui me concerne, si vous convertissez en JSON, vous frappez un coup contre un format de données mal structuré. –