2012-04-23 55 views
10

Estoy usando el método jQuery $.ajax para obtener datos de un servicio web compatible con JSONP y en cuanto a obtener una respuesta y mostrar los datos recibidos en mi HTML, todo parece estar funcionando bien. Sin embargo, no he podido activar el éxito de la devolución de llamada del método ajax. Lo que es aún más extraño es que incluso cuando recibo una respuesta válida del servicio, la devolución de llamada de error siempre se activa.jQuery ajax éxito callback no dispara

Aquí es un ejemplo de una simple función js que hice para probar esto:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://example.com/api/service?callback=blah", 
     dataType: "jsonp", 
     crossDomain: true, 
     success: function() { console.log("success"); }, // This is never fired 
     error: function() { console.log("error"); } // This is always fired 
    }); 
} 

y la función de devolución de llamada coincidente:

function blah(data) 
{ 
    console.log(data); // This is called properly 
} 

De la lectura de preguntas similares aquí en la SO y en otros lugares, parece que esto es más a menudo causado por el servicio que devuelve JSON que no valida. Para mis propósitos, estoy usando un servicio web en la casa, pero he probado otros servicios JSONP así, como los proporcionados por Flickr, por ejemplo:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah

Tanto el JSON del servicio y la mía de validación de Flickr usando jsonlint para que no parezca ser el problema por lo que yo sé.

En la búsqueda de soluciones a este problema, he intentado utilizar un complemento jQuery llamado jquery-jsonp, que se encuentra en http://code.google.com/p/jquery-jsonp/. Esto reemplaza $.ajax llamado de jQuery con su propio $.jsonp por lo que el código es el siguiente:

function doJsonp() 
{ 
    $.jsonp({ 
     url: "http://example.com/api/service?callback=blah", 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 

Sin embargo, el resultado es el mismo y la devolución de llamada de éxito nunca se disparará. ¡Cualquier ayuda o un empujón en la dirección correcta sería muy apreciada!

+1

¿Cuál es la respuesta del servidor? Puede encontrarlo en herramientas develeopers como Dragonfly (opera), Firebug (FireFox), Herramientas para desarrolladores (Chrome) –

+0

url: "http://example.com/api/service?callback=blah"! = Su nombre de función bleh(). ¿Podría ser un error tipográfico? – mayrs

+0

@BartoszGrzybowski El estado de respuesta del servidor es 200 OK – Limescale

Respuesta

4

definen la devolución de llamada a través de la función jsonpCallback -option, no dentro de la URL:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
     dataType: "jsonp", 
     crossDomain: true, 
     jsonpCallback:'blah',//<<< 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 
Cuestiones relacionadas