2010-12-01 10 views
0

J'essaie d'extraire des informations d'un fichier JSON mais rien ne vient dans la variable de données. Quelqu'un peut-il me dire ce que je fais mal. Le fichier JSON est téléchargé donc il n'y a aucun problème avec moi ne rien obtenir du serveur.jQuery JSON get issue

function handle_geolocation_query(position) { 
    var url = "http://ws.geonames.org/findNearByWeatherJSON?lat=" + position.coords.latitude + "&lng=" + position.coords.longitude + "&callback=?"; 
    $.getJSON(url, function(info){ 
     var clouds = info.weatherObservation.clouds; 
     var weather = info.weatherObservation.weatherCondition; 
     var temp = info.weatherObservation.temperature; 
     var humidity = info.weatherObservation.humidity; 
    }); 
    //console.log(clouds); 
    document.getElementById('result').innerHTML = "C:" + clouds + ", W:" + weather + ", T:" + temp + ", H:" + humidity; 
} 

Appréciez toute l'aide. Merci beaucoup.

+2

avec Firebug pouvez-vous vérifier l'onglet JSON sur le panneau net, est-il redonner la même structure que vous accédez. – kobe

+0

encore une suggestion de toute façon vous utilisez jquery, utilisez .html() au lieu de .innerhtml, vous pouvez simloy say ('#result'). Html(); weatherObservation est un tableau d'objets ou d'objets uniques. – kobe

+0

"rien ne vient dans la variable de données" contredit l'instruction "Le fichier JSON est téléchargé". soit il revient avec quelque chose, soit il ne le fait pas. – RPM1984

Répondre

0

Vous devriez essayer de placer le code qui modifie innerHTML dans le rappel. Rappelez-vous que JS a une portée de fonction. Vous ne pouvez pas accéder à ces variables à l'extérieur. En outre, ces variables sont définies uniquement après que le rappel de la récupération du JSON est exécuté.

function handle_geolocation_query(position) { 
    var url = "http://ws.geonames.org/findNearByWeatherJSON?lat=" + position.coords.latitude + "&lng=" + position.coords.longitude + "&callback=?"; 
    $.getJSON(url, function(info){ 
     var clouds = info.weatherObservation.clouds; 
     var weather = info.weatherObservation.weatherCondition; 
     var temp = info.weatherObservation.temperature; 
     var humidity = info.weatherObservation.humidity; 
     $('#result').html("C:" + clouds + ", W:" + weather + ", T:" + temp + ", H:" + humidity); 
    }); 
} 

Edit: Suivant les conseils de gov, vous devez utiliser la méthode html encapsulé() API de jQuery chaque fois que vous trouvez la nécessité de changer innerHTML.

En outre, vous pouvez utiliser:

console.log(info); 

pendant le débogage dans le rappel getJSON juste pour assurer que vos données est structuré de la façon dont vous pensez qu'il est.

+0

Oh mon dieu, vous m'avez sauvé tant de chagrin. J'apprécie vraiment votre aide. Merci beaucoup. – Aayush

+0

@aayush, la plupart du temps comme dit rabidfire, il pourrait être problème de structure, je pense que vous n'accédez pas à la façon dont il revient ... ?? avez-vous des erreurs sur la console firebug tout en accédant à la propriété d'objet normalement si elle est erronée, elle émet des erreurs, – kobe

+0

@aayush nous le faire savoir une fois que vous avez résolu le problème, juste désireux de savoir quel est le problème. – kobe

0

essayer de faire ci-dessous, je pense qu'il peut venir comme tableau d'objets

var clouds = info.weatherObservation.clouds; 
     var weather = info[0].weatherObservation.weatherCondition; 
     var temp = info[0].weatherObservation.temperature; 
     var humidity = info[0].weatherObservation.humidity;