2010-11-30 23 views
1

J'ai un service Web servi dans JSONP, mais depuis que je suis nouveau à ce que j'ai des difficultés à récupérer les données. Voici mon code:aider avec Jsonp et jQuery

$(document).ready(function(){    
    $.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=myData", 
     function myData(result){ 
      $('#status').append(result.name.text); 
     } 
    ); 

}); 

le div # status retourne vide.

pourriez-vous m'aider?

Merci à l'avance

Mauro

Mise à jour: maintenant ça marche! Bout il ne fait pas quand j'essaye de boucler si les données:

$.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=?", 
     function (result){ 
       $.each(result.items, function(item){ 
       $('#status').append(item.response.lines[0].name); 
     }); 
    } 
); 

Qu'est-ce que je fais mal?

Merci

+0

Avez-vous vérifié que l'objet jsonp est correctement retourné? Un outil utile pour cela s'appelle Fiddler. –

+0

@ Aaron oui pense que oui. Essayez-le vous-même aller à: http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=myData – Mauro74

Répondre

2

De jQuery API:

Si l'URL comprend la chaîne "callback =?" (ou similaire, tel que défini par l'API côté serveur), la requête est traitée comme JSONP à la place.

Je pense que votre code devrait ressembler à ceci

L'astuce est la partie json=? de l'URL. Je pense que jQuery crée une fonction à la volée pour analyser les données JSONp et transmet le résultat à votre fonction de rappel.

Excuse mon anglais :)

Mise à jour: pour accéder aux données que vous devez itérer sur result.response.lines dans la fonction de rappel

$.each(result.response.lines, function() { 
    $('#status').append(this.name); 
} 
+0

Merci maintenant ça fonctionne! Comment faire une boucle dans le résultat? Voir mon code dans la question mise à jour. Merci – Mauro74

+0

J'ai mis à jour la réponse avec un indice – afgomez

2

Ceci est la sortie de l'URL:

myData({"response":{"lines":[{"name":"Central"},{"name":"Victoria"}]}}); 

Vous pouvez reformater l'objet pour le rendre plus clair:

{ 
    "response": { 
     "lines": [ 
      {"name":"Central"}, 
      {"name":"Victoria"} 
     ] 
    } 
} 

Je ne vois aucune propriété appelée text. Vous voulez dire sans doute:

$('#status').append(result.response.lines[0].name); 

Mise à jour: cette solution ne résout pas complètement le problème. Comme suggéré dans la réponse acceptée, vous devez demander à jQuery de générer un nom de fonction aléatoire (vous ne pouvez pas fournir le vôtre, pas au moins avec getJSON).