2011-09-21 3 views
2

J'utilise le code suivant dans un de mes fichiers HTMLComment récupérer JSON à partir d'une URL en utilisant JavaScript?

var queryURL = encodeURI(yahooUrl + loc + appId); 
alert(queryURL); 

$.getJSON(queryURL, function(data){ 
    alert('inside getJSON') 
    alert(data); 
    var items = []; 
    $.each(data, function(key, value){ 
     items.push('<li id="' + key + '">' + value + '</li>'); 
    }); 
    $('<ul/>', { 
     'class': 'my-new-list', 
     html: items.join('') 
    }).appendTo('body'); 
});` 

queryURL est une grande requête qui, si je charge de la barre d'adresse du navigateur, je reçois un fichier contenant un objet JSON. Mais le code suivant ne fonctionne pas, l'objet JSON entier est affiché sur la console d'erreur de Firefox, avec l'erreur 'Invalid Label'. J'ai ajouté &callback=? à la fin de la chaîne de requête comme mentionné dans quelques-unes des réponses ici à SO.

Quelqu'un peut-il suggérer ce que je fais mal?

Modifier: pour

queryURL = "http://where.yahooapis.com/geocode?location=107,South%20Market,San%20Jose,San%20Fransico,Leusina,USA,&flags=J&appid=dj0yJmk9SUk0NkdORm9qM2FyJmQ9WVdrOU1tVnFUVzlVTm5NbWNHbzlORFl4TnpZME5UWXkmcz1jb25zdW1lcnNlY3JldCZ4PWE1&callback=?"

Je reçois l'erreur suivante:

Error: invalid label 
Source File: http://where.yahooapis.com/geocode?location=107,South%20Market,San%20Jose,San%20Fransico,Leusina,USA,&flags=J&appid=dj0yJmk9SUk0NkdORm9qM2FyJmQ9WVdrOU1tVnFUVzlVTm5NbWNHbzlORFl4TnpZME5UWXkmcz1jb25zdW1lcnNlY3JldCZ4PWE1&callback=jQuery16404719878257064011_1316606312366&_=1316608283354 
Line: 1, Column: 1 

Code Source:

{"ResultSet":{"version":"1.0","Error":0,"ErrorMessage":"No error","Locale":"us_US","Quality":87,"Found":1,"Results":[{"quality":39,"latitude":"37.336849","longitude":"-121.847710","offsetlat":"37.338470","offsetlon":"-121.885788","radius":34800,"name":"","line1":"","line2":"San Jose, CA","line3":"","line4":"United States","house":"","street":"","xstreet":"","unittype":"","unit":"","postal":"","neighborhood":"","city":"San Jose","county":"Santa Clara County","state":"California","country":"United States","countrycode":"US","statecode":"CA","countycode":"","uzip":"","hash":"","woeid":2488042,"woetype":7}]}} 
+1

Le '' = rappel est de déclencher le mode 'jsonp' , ce qui n'est utile que si vous récupérez des données json d'un domaine autre que votre page. –

+0

Oui ... comme vous pouvez le deviner j'interroge l'API de Yahoo ... – aProgrammer

+1

Pouvez-vous publier la chaîne JSON, ou une partie de celle-ci? Il peut s'agir d'un problème dû au formatage incorrect de JSON lorsque la chaîne est affichée dans la console et donc renvoyée au client. –

Répondre

5

Cela peut être dû au fait que jQuery passe automatiquement à l'aide JSONP (parce que c'est une demande interdomaine) et Yahoo apparently doesn't use JSONP but regular JSON. Avez-vous essayé bon vieux $.ajax() avec dataType:"JSON"?

aide .ajax $:

 $.ajax({ 
      url: queryURL, 
      dataType: "JSON", 
      success: function(data){ 
       alert('inside getJSON') 
       alert(data); 
       var items = []; 
       $.each(data, function(key, value){ 
        items.push('<li id="' + key + '">' + value + '</li>'); 
       }); 
       $('<ul/>', { 
        'class': 'my-new-list', 
        html: items.join('') 
       }).appendTo('body'); 
      } 
     }); 

Laissez-moi être exceptionnellement bien ici que je vais avoir une journée horrible: Working example

+0

réellement n'ont pas essayé $ .ajax(). Honnêtement parlant je ne sais vraiment pas comment l'utiliser .. – aProgrammer

+0

J'ai édité mon poste avec un exemple. – joostdevries

+0

merci ... J'ai essayé le code ci-dessus .. semble fonctionner mais la liste est préparée caractère par caractère ... et n'est pas très lisible. Je pense que yahoo envoie un long "String" au lieu de JSON. . . – aProgrammer

Questions connexes