2008-12-17 25 views
5

Tengo un problema. Creé un script para hacer una solicitud a un enlace interno que devuelve una respuesta. Esto es lo que el guión se parece a:jQuery no analiza JSON correctamente

jQuery.get(callUrl, function(data){ 
       console.log(typeof data); 
       jQuery.each(data.items, function(i,item){    

             console.log(i); 

           }); 
     },'json'); 

y la respuesta que el servidor envía el siguiente aspecto:

{"items":[    
    { 
    "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg", 
    "id": "83", 
    "gallery_id": "30", 
    "username": "admin" 
    }] 
} 

Mi problema es cuando analizar los "datos" su tipo es siempre cadena. Necesito que sea un objeto para poder consultarlo y analizarlo con mi script. Para llegar al fondo del problema, he intentado comparar mi script para el ejemplo en la página de documentación de jQuery:

http://docs.jquery.com/Ajax/jQuery.getJSON

Las principales diferencias con la solicitud en esta página y mi solicitud es que utiliza la método getJSON. Cuando traté de usar eso con la url de mi servidor, no obtuve ninguna respuesta, así que esa es la razón principal por la que opté por el método get y especificando el tipo de devolución como "json".

Otra cosa que probé: revisé el Flickr feed que usa el ejemplo de jQuery para buscar el encabezado Content-type que envía de vuelta, pensando que tal vez mi feed tenía el encabezado incorrecto, y es esto en la fuente de Flickr:

Content-Type application/x-javascript; charset=utf-8 

Este es exactamente el mismo encabezado en mi propio feed. Así que estoy desconcertado. ¿Alguien sabe por qué ocurre esto?

Respuesta

7

El JSON necesita tener corchetes alrededor de ella, por lo que debe ser:

({"items":[    
    { 
    "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg", 
    "id": "83", 
    "gallery_id": "30", 
    "username": "admin" 
    }] 
}) 

A continuación, debería ser capaz de utilizar getJSON, ya que es la forma más fácil de obtener los datos como un objeto. Sin embargo, también puede evaluar() la cadena y devolverá un objeto.

+0

getJSON puede no funcionar si JSONP no es compatible con el punto final al que está accediendo. – singpolyma

+0

Eso es verdad singpolyma, ¿Cómo hago que JSONP sea compatible en mi servidor interno? – picardo

+0

Lo resolví cuando usé eval() y el objeto de retorno circundante con parens. Está trabajando con getJSON ahora también. ¡Gracias chicos! – picardo

1

¿Ha intentado crear un objeto de esa cadena llamando a la función JavaScript eval()? Si primero llama a eval (data) en su función de devolución de llamada, debería darle un objeto.

Cuestiones relacionadas