2012-02-20 5 views
0

Je charge un fichier php/json. Ceci est mon fichier json:parse json en javascript

echo '{'; 
echo '"position":['; 
while($inhoud = mysql_fetch_array($result)) 
{ 
    echo '{'; 
    echo '"lat":"'.$inhoud['lat'].'",'; 
    echo '"long":"'.$inhoud['long'].'",'; 
    echo '}'; 

} 

echo ']}'; 

Cela fonctionne. Je veux le charger dans mon javascript et le faire comme ceci:

$.getJSON('req/position.php', function(data) { 
$.each(data, function(key, val) { 
    newLatLng = key; 
}); 
}); 

mais cela ne fonctionne pas. Il charge le fichier mais je ne reçois pas ces données. Que devrais-je faire?

Merci,

+0

Définir * "cela ne fonctionne pas" *. Qu'est-ce qui se passe c'est différent de ce que vous attendez? Quels messages d'erreur recevez-vous, le cas échéant?Qu'est-ce que la console javascript affiche dans votre navigateur lorsque vous essayez d'accomplir quoi que ce soit * "ne fonctionne pas?" * – rdlowrey

+0

bien, rien. Il charge le fichier puis rien. J'ajoute une alerte mais celle-ci n'a pas été tirée –

Répondre

1

Vous avez vos coordonnées définies dans le tableau nommé position. Vous devez itérer à travers cela. Le tableau contient des objets avec les propriétés lat et long. Si vous souhaitez utiliser les valeurs, vous devriez essayer quelque chose comme:

$.getJSON('req/position.php'), function(data){ 
    $.each(data.position, function(index, value){ 
     var newLatLng = { latitude: value.lat, longitude: value.long }; 
    }); 
}); 
+0

Je fais ceci: $ .getJSON ('req/position.php'), fonction (données) { $ .each (data.position, function (index, valeur) { alerte ('succès'); }); }; mais je ne reçois pas d'alerte. –

0
$.getJSON('req/position.php', function(data) { 
    var obj = JSON.parse(data); 
    // At this point, obj is an object with your JSON data. 
}); 

Source: MDN

1

Retour en-tête approprié dans un script PHP header('Content-type: application/json'); Et cela devrait fonctionner.

Utilisez également json_encode pour coder les valeurs PHP dans JSON valide.

5

Je pense que vous avez des erreurs de syntaxe dans la sortie JSON.

  • Lorsque vous "long" sortie des données, vous ajoutez une virgule , à la fin, mais vous ne devriez pas, parce que "long" est la dernière clé de l'objet.
  • Vous imprimez un objet dans un cycle while. Ces objets font partie d'un tableau. Donc, sauf pour le dernier, vous devez ajouter une virgule , après la fermeture }.

Et, si je peux demander, pourquoi vous n'utilisez pas la json_encode() fonction PHP, au lieu de construire toute la chaîne JSON manuellement? Avec lui, vous construisez toutes les données comme un tableau PHP normal, et ensuite l'encoder (traduire) en JSON. Vous éviterez tous ces trucs de syntaxe ennuyeux.

Essayez-:

$data = array(); 
$data['position'] = array(); 

while($inhoud = mysql_fetch_array($result)) 
{ 
    $data['position'][] = array(
     "lat" => $inhoud['lat'], 
     "long" => $inhoud['long'] 
    ); 
} 

echo json_encode($data); 
+0

J'ai changé mon json à ce code. Je n'étais pas au courant du json_encode. Vraiment sympa! Merci. Il n'a pas corrigé le script mais je suis content de cette façon propre –

1

Construction JSON en php par chaînes, mais des œuvres est primitive. Commencez à construire un tableau et utilisez json_encode().

$arr = array(); 

while($inhoud = mysql_fetch_array($result)){ 
    $temp = array(); 
    $temp['lat'] = $inhoud['lat']; 
    $temp['long'] = $inhoud['long']; 
    $arr[] = $temp; 
} 

echo json_encode($arr); 

Si tout ce que vous sélectionnez dans votre requête MySQL est « de latitude » et « long », vous pouvez également placer juste $inhoud dans $arr l'intérieur de votre boucle while comme ceci.

while($inhoud = mysql_fetch_array($result)){  
    $arr[] = $inhoud; 
} 

Si vous faites cela assurez-vous de ne sélectionner des colonnes dans votre requête mysql que vous voulez en sortie JSON.