2011-07-07 32 views
6

Estoy solicitando una URL con el Ajax que se traduce en un código de cabecera HTTP 500. Yo esperaría que esto para activar la función de error:jQuery devolución de llamada de error de Ajax no disparar

$.ajax({ 
    url: "http://xxx", 
    dataType: "jsonp", 
    crossDomain: true, 
    success: function(data) { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 

Esto funciona en Safari, pero falla en Chrome y Firefox.

¿Qué estoy haciendo mal?

Esta es la última 1.4.X jQuery, por razones que no se puede actualizar a versiones posteriores ..

La respuesta envía un código HTTP 500, Tipo de contenido application/json y contenidos:

jsonp1310063232212 ({ "error": {"reason": "Usuario no encontrado"}})

+0

No estoy seguro de si esta versión de jQuery puede detectar errores JSONP. Intente establecer un tiempo de espera para su solicitud. Se puede llamar a la devolución de llamada si no se ha recibido ningún resultado después de que haya expirado el tiempo de espera. –

+0

Gracias, pero no hay cambio. Sin devolución de llamada de error, sin devolución de llamada exitosa. También se agregó el método ajaxError, pero eso tampoco se llama. – Wesley

Respuesta

3

Parece que crossDomain: no se ha agregado hasta jQuery 1.5.

http://api.jquery.com/jQuery.ajax/

crossdomain (añadió 1,5)

defecto: false para las solicitudes del mismo dominio, cierto para solicitudes entre dominios.

Si desea fuerza de una solicitud crossdomain (como JSONP) en el mismo dominio, establezca el valor de crossdomain true. Este permite, por ejemplo, del lado del servidor redirección a otro dominio

Como Martin Larente sugirió en su comentario, que podría ser un problema con cómo los diferentes navegadores o jQuery detecta/Informes de errores JSONP.

6

Como se indica en la documentación de JQuery [1], el controlador de errores no se llama para secuencias de comandos entre dominios y solicitudes JSONP. Funcionó (no siempre) en versiones anteriores de JQuery.

que resolver utilizando un plug-in compacto y eficaz que incluye un buen gestor de errores: http://code.google.com/p/jquery-jsonp/

descargarlo y agregarlo a la cabeza:

<script src="javascripts/jquery.jsonp-2.2.0.min.js" type="text/javascript"></script> 

continuación, puede utilizar la función $ .jsonp() similar a $ .ajax():

$.jsonp({ 
    url: "http://xxx?callback=?", 
    data: { 
     var: 'test' 
    }, 
    cache: false, 
    success: function(data, textStatus) { 
     // ... 
    }, 
    error: function(xOptions, textStatus) { 
     console.log('Error'); 
     // ... 
    } 
}); 

[1] http://api.jquery.com/jQuery.ajax/

+0

estoy atascado usando una versión anterior de jquery (1.8.2), y el cambio a la función jsonp funcionó para mí. –

Cuestiones relacionadas