json Uncaught SyntaxError: testigo Inesperado :

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

$(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 RAW de Solicitud:

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 CRUDA Respuesta:

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 que se está volviendo en la respuesta (rojo : #f00), pero Chrome informes Uncaught SyntaxError: testigo Inesperado : los colores.json:1

Si puedo navegar directamente a la propia dirección url, el JSON devuelto y se muestra en el navegador.

Si puedo pegar el contenido de los colores.json en JSLINT, el json valida.

Alguna idea de por qué yo no puedo conseguir que este error y nunca lo voy hacer para el éxito de devolución de llamada?

EDITAR – el jQuery.ajax() la llamada anterior funciona perfecto en jsfiddle.net y devuelve la alerta de «éxito», como se esperaba.

EDITAR 2 – este URL funciona bien «http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json’ me di cuenta de que se devuelve como TYPE: text/javascript y el Chrome no tirar el testigo Inesperado. Yo he probado varios otros de la dirección url y el ÚNICO que no se lanza el Unexptected símbolo es la wunderground que se devuelve como TYPE: text/javascript.

Arroyos devuelve como text/plain y application/json no se analizan correctamente.

  • Una nota de lado, me di cuenta de que al golpear la dirección url en un navegador de la «#» en realidad no se muestran en el json. wncrunners.com/admin/colors.json
  • Gracias por el aporte. He quitado el # a prueba de Keith teoría. La eliminación de no afectar el error. También he quitado la .json de la extensión del archivo. Mismo error.
InformationsquelleAutor paparush | 2011-10-29

4 Kommentare

  1. 129

    Has dicho jQuery para esperar un JSONP respuesta, que es por qué jQuery ha añadido el callback=jQuery16406345664265099913_1319854793396&_=1319854793399 parte de la dirección URL (se puede ver esto en el volcado de la solicitud).

    Lo que está regresando es JSON, no JSONP. Su respuesta parece

    {"red" : "#f00"}

    y jQuery está esperando algo como esto:

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

    Si usted realmente necesita para utilizar JSONP para obtener alrededor de el origen mismo de la política, entonces el servidor que sirve colors.json necesita para ser capaz de devolver un JSONP respuesta.

    Si el origen mismo de la política no es un problema para su aplicación, entonces usted sólo tiene que fijar el dataType en su jQuery.ajax llamada a ser json en lugar de jsonp.

    • Gracias Juan. Si puedo tomar el mismo código y el punto de que a api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/…, a continuación, la respuesta tiene la jQueryxxxx() envuelto alrededor de los datos en json, el código se ejecuta bien, y me da el ‘Éxito’ de alerta. Yo no puedo cambiar la forma en que el servidor remoto sirve el archivo JSON. Si yo uso dataType: ‘json’ yo XMLHttpRequest no se puede cargar isohunt.com/js/json.php?ihq=test. Origen localhost:8888 no está permitido por Access-Control-Allow-Origin.
    • Bien. La Weather Underground URL que dio no responder a JSONP solicitudes. (Usted verá esto si agrega ?callback=something a esa URL. El error que obtiene al utilizar dataType: json es porque el mismo origen de la política. Permítanme añadir a mi respuesta.
    • El problema, en realidad, parece ser si el servidor responde con Type: text/javascript, luego Chrome no ladrar sobre Uncaught SyntaxError. Si el servidor remoto devuelve como type: text/plain o application/json de Chrome, a continuación, los informes de la Uncaught SyntaxError.
    • Planitud – gracias por esta explicación, muy útil!
    • Gracias!! Esto fue muy útil.
    • gracias por la explicación , yo tengo el mismo problema pero no puedo cambiar mi código de servidor , debo tener para hacerlo en mi lado del cliente llamar a cualquier sugerencia o js que ayuda a resolver este problema, sin jsonp cruz de dominio error viene por lo que necesita para utilizar jsonp aquí es un violín para mi problema jsfiddle.net/waamit14/wZSeB

  2. 4

    He pasado los últimos días tratando de entender esto a mí. Usando el viejo json tipo de datos le da el origen de la cruz de los problemas, mientras que establecer el tipo de datos a jsonp hace que los datos «ilegible», como se explicó anteriormente. Así que ahí están, al parecer, de dos maneras, la primera no ha funcionado para mí, pero parece una solución potencial y que podría estar haciendo algo mal. Esto se explica aquí [ https://learn.jquery.com/ajax/working-with-jsonp/ ].

    El único que funcionó para mí es como sigue:
    1 – descargar el ajax origen de la cruz enchufe [ http://www.ajax-cross-origin.com/ ].
    2 – agregar una secuencia de comandos de enlace justo debajo de la normal de jQuery enlace.
    3 – agregar la línea «crossOrigin: true,» a la función ajax.

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

    HTML:

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

    • gracias S . Rehan. Este post ha sido un salvavidas!
    • Una rápida cabezas para arriba: que el ajax origen de la cruz plugin utiliza un proxy google. Así que todo lo que estamos haciendo es la transposición de sus datos a un servidor proxy que alguien escribió para usted.
  3. 2

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

    jsonp(

    …. su json …

    )

    • ¿Encapsular en el lado del servidor? O hay una manera de lograr esto en el lado del cliente?
  4. 1

    Que hex puede ser que necesite para ser envuelto en citas y se convierte en una cadena. Javascript puede no gustarles el carácter #

    • Keith, gracias por su respuesta. Para probar, he quitado el signo # en el archivo de ejemplo que los contenidos que son ahora {«rojo» : «f00»}, pero el mismo error persiste. Una cosa que noto es que la Respuesta de Tipo de Contenido es texto sin formato en lugar de application/json.
    • Como otra prueba, que cambió el nombre del archivo que acaba de ser de colores (sin extensión) y me sale exactamente el mismo error.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea