2009-06-05 19 views
7

Necesito hacer una solicitud sincrónica a la API last.fm, pero cuando uso GET y json juntos, la solicitud se vuelve asincrónica.solicitud jquery json sincrónica

mi código:

$.ajax({ 
     async: false, 
    dataType: "json", 
    url: "http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist="+artist+"&api_key="+apiKey+"&format=json&callback=?", 
    success: function(html){ 
      imgURL = html.images.image[1].sizes.size[0]["#text"]; 
    } 
}); 

Si quito tipoDatos: "json" o en la post, es sincrónica de nuevo, pero yo soy dependiente utilizando tanto JSON y GET.

¿Alguna idea?

Respuesta

13

Ah, esto se debe a que está tratando de hacer solicitudes de dominios cruzados, y las solicitudes de dominios cruzados dependen de una etiqueta de secuencia de comandos dinámica, que nunca puede ser sincrónica, debe usar datatype json y el método GET.

Si realiza una POST o elimina el tipo de datos, obtendrá un error de acceso debido a la política same-origin. Volverá de inmediato, pero como un fracaso.

+0

hmmm, supongo que tendré que encontrar otra manera, entonces ... gracias por la respuesta de todos modos. –

+0

¿Podría devolver la cadena JSON como texto y analizar la cadena JSON a un objeto él mismo en su función success() utilizando json2.js desde www.json.org? –

+0

@Lunchy No sin algo para manejar redirigir la solicitud de su lado. La única forma de obtener datos desde otro dominio es usar la etiqueta de script y una función de devolución de llamada. Definitivamente parece que el servicio está orientado exactamente a eso al especificar la función de devolución de llamada como una URL. Puede simular el bloqueo, pero solo con Javascript 1.7. http://hyperstruct.net/2008/5/17/synchronous-invocation-in-javascript-part-1-problem-and-basic-solution http://www.neilmix.com/2007/02/07/threading -in-javascript-17 / – cgp