json Uncaught SyntaxError: Token inesperado:

Intentando hacer una llamada y recuperar un archivo JSON muy simple de una línea.

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

Aquí está la solicitud 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 

Aquí está la respuesta 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"} 

El JSON regresa en la respuesta (rojo: # f00), pero Chrome informa Uncaught SyntaxError: Token inesperado: colors.json: 1

Si navego directamente a la url, se devuelve el JSON y se muestra en el navegador.

Si pego el contenido de colors.json en JSLINT, el json valida.

¿Alguna idea de por qué no puedo obtener este error y nunca llegaré a la callback exitosa?

EDITAR – la llamada jQuery.ajax () anterior funciona perfectamente en jsfiddle.net, y devuelve la alerta ‘éxito’ como se esperaba.

EDIT 2 – esta URL funciona bien ‘http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json’ Me di cuenta de que volvía como TYPE: text / javascript y Chrome no arrojaba el Token Inesperado. He probado varias URL más y la ÚNICA que no arroja el Token no detectado es el sotano que se devuelve como TYPE: text / javascript.

Los flujos devueltos como text / plain y application / json no se están analizando correctamente.

Le ha dicho a jQuery que espere una respuesta JSONP , por lo que jQuery ha agregado la callback=jQuery16406345664265099913_1319854793396&_=1319854793399 parte de la URL (puede ver esto en su volcado de la solicitud).

Lo que estás devolviendo es JSON, no JSONP. Tu respuesta se ve como

 {"red" : "#f00"} 

y jQuery espera algo como esto:

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

Si realmente necesita utilizar JSONP para evitar la misma política de origen, entonces el servidor que sirve colors.json necesita poder devolver una respuesta JSONP.

Si la misma política de origen no es un problema para su aplicación, solo necesita corregir el tipo de datos en su llamada jQuery.ajax para que sea json lugar de jsonp .

He pasado los últimos días tratando de resolver esto yo mismo. El uso del antiguo json dataType le proporciona problemas cruzados de origen, mientras que al configurar el tipo de datos en jsonp hace que los datos sean “ilegibles” como se explicó anteriormente. Entonces, aparentemente hay dos formas de salir, la primera no me ha funcionado pero parece ser una posible solución y es posible que esté haciendo algo mal. Esto se explica aquí [ https://learn.jquery.com/ajax/working-with-jsonp/ ].

El que funcionó para mí es el siguiente: 1- descargue el conector de origen cruzado ajax en [ http://www.ajax-cross-origin.com/ ]. 2- agregue un enlace de script justo debajo del enlace jQuery normal. 3- agrega la línea “crossOrigin: true” a tu función ajax.

¡Bueno para ir! aquí está mi código de trabajo para esto:

  $.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); } }) 

Tuve el mismo problema y la solución fue encapsular el json dentro de esta función

jsonp (

…. tu json …

)

Ese hex puede necesitar ser envuelto entre comillas y hecho una cadena. Puede que a javascript no le guste el caracter #