json Uncaught SyntaxError: jeton inattendu:

Essayer de passer un appel et de récupérer un fichier JSON simple et très simple.

$(document).ready(function() { jQuery.ajax({ type: 'GET', url: 'http://wncrunners.com/admin/colors.json' , dataType: 'jsonp', success: function(data) { alert('success'); } }); });//end document.ready 

Voici la demande RAW:

 GET http://wncrunners.com/admin/colors.json?callback=jQuery16406345664265099913_1319854793396&_=1319854793399 HTTP/1.1 Host: wncrunners.com Connection: keep-alive Cache-Control: max-age=0 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2 Accept: */* Referer: http://localhost:8888/jquery/Test.html Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

Voici la réponse RAW:

 HTTP/1.1 200 OK Date: Sat, 29 Oct 2011 02:21:24 GMT Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d SE/0.5.3 Last-Modified: Fri, 28 Oct 2011 17:48:47 GMT ETag: "166a2402-10-4eaaeaff" Accept-Ranges: bytes Content-Length: 16 Content-Type: text/plain Connection: close {"red" : "#f00"} 

Le JSON revient dans la réponse (rouge: # f00), mais Chrome signale une erreur de syntaxe non détectée: jeton inattendu: colors.json: 1

Si je navigue directement dans l’URL, le JSON est renvoyé et s’affiche dans le navigateur.

Si je colle le contenu de colors.json dans JSLINT, json valide.

Des idées pour lesquelles je ne peux pas obtenir cette erreur et je ne parviens jamais au rappel de succès?

EDIT – l’appel jQuery.ajax () ci-dessus s’exécute parfaitement sur jsfiddle.net, et renvoie l’alerte “succès” comme prévu.

EDIT 2 – cette URL fonctionne très bien ‘http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json’ J’ai remarqué qu’elle retournait sous la forme TYPE: text / javascript et Chrome ne lançaient pas le jeton inattendu. J’ai testé plusieurs autres URL et la SEULE SEULE qui ne lance pas le Jeton Unexptected est le wunderground renvoyé sous la forme TYPE: text / javascript.

Les stream renvoyés sous la forme text / plain et application / json ne sont pas analysés correctement.

    Vous avez dit à jQuery d’attendre une réponse JSONP , c’est pourquoi jQuery a ajouté la partie callback=jQuery16406345664265099913_1319854793396&_=1319854793399 à l’URL (vous pouvez le voir dans votre vidage de la requête).

    Ce que vous retournez est JSON, pas JSONP. Votre réponse ressemble à

     {"red" : "#f00"} 

    et jQuery attend quelque chose comme ceci:

     jQuery16406345664265099913_1319854793396({"red" : "#f00"}) 

    Si vous avez réellement besoin d’utiliser JSONP pour contourner la même politique d’origine, le serveur servant colors.json doit pouvoir retourner une réponse JSONP.

    Si la même politique d’origine n’est pas un problème pour votre application, il vous suffit de corriger le type de dataType dans votre appel jQuery.ajax pour qu’il soit json au lieu de jsonp .

    J’ai passé les derniers jours à essayer de comprendre cela moi-même. L’utilisation de l’ancien json dataType vous pose des problèmes d’origine croisée, tandis que la définition de dataType sur jsonp rend les données “illisibles” comme expliqué ci-dessus. Donc, il y a apparemment deux sorties, la première n’a pas fonctionné pour moi mais semble être une solution potentielle et que je pourrais faire quelque chose de mal. Ceci est expliqué ici [ https://learn.jquery.com/ajax/working-with-jsonp/ ].

    Celui qui a fonctionné pour moi est le suivant: 1- téléchargez le plug-in d’origine ajax dans [ http://www.ajax-cross-origin.com/ ]. 2- Ajoutez un lien de script juste en dessous du lien jQuery normal. 3- append la ligne “crossOrigin: true” à votre fonction ajax.

    Bon à faire! voici mon code de travail pour cela:

      $.ajax({ crossOrigin: true, url : "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.86,151.195&radius=5000&type=ATM&keyword=ATM&key=MyKey", type : "GET", success:function(data){ console.log(data); } }) 

    J’ai eu le même problème et la solution consistait à encapsuler le json dans cette fonction

    jsonp (

    …. ton json …

    )

    Cet hex pourrait devoir être mis entre guillemets et transformé en chaîne. Javascript pourrait ne pas aimer le caractère #