2011-02-19 7 views
21

Soy JQuery n00b. Estoy tratando de codificar de una manera muy simple usando $ .get(). El official documentation dice

If a request with jQuery.get() returns an error code, it will fail silently 
unless the script has also called the global .ajaxError() method or. 

As of jQuery 1.5, the .error() method of the jqXHR object 
returned by jQuery.get() is also available for error handling.

Así que, si todo va bien, mi llamada de retorno para el éxito será llamado. Sin embargo, si la solicitud falla, me gustaría obtener el código HTTP: 404, 502, etc. y formular un mensaje de error significativo para el usuario.

Sin embargo, ya que esta es una llamada asincrónica me puedo imaginar que podría tener varias excepcional. ¿Cómo sabría .ajaxError() a qué solicitud corresponde? Tal vez sería mejor usar el método .error() del objeto jqXHR devuelto por jQuery.get()?

¿Puede alguien proponer un ejemplo de código extremadamente simple? Tal vez la rutina de éxito llama Alerta ("Página no encontrada") y la falta de controles de rutina 404 y hace una Alerta ("Página no encontrada")


Actualización: la página siguiente es extremadamente útil ... http://api.jquery.com/jQuery.get/

Respuesta

48

tienes razón en que se puede utilizar la nueva jqXHR de jQuery 1.5 para asignar controladores de errores a $.get() solicitudes. Esta es la forma en que puede hacerlo:

var request = $.get('/path/to/resource.ext'); 

request.success(function(result) { 
    console.log(result); 
}); 

request.error(function(jqXHR, textStatus, errorThrown) { 
    if (textStatus == 'timeout') 
    console.log('The server is not responding'); 

    if (textStatus == 'error') 
    console.log(errorThrown); 

    // Etc 
}); 

También puede encadenar manipuladores directamente sobre la llamada:

$.get('/path/to/resource.ext') 
    .success(function(result) { }) 
    .error(function(jqXHR, textStatus, errorThrown) { }); 

Yo prefiero la primera para mantener el código de menos enredado, pero ambos son equivalentes.

+0

+1 Gracias por la ayuda. Pero, ¿qué sucede si tengo varias solicitudes activas en paralelo? ¿Cómo puedo saber qué error pertenece a qué? – Mawg

+1

El objeto jqXHR pasado al controlador de errores contendrá información sobre la solicitud original que generó el error. Dependiendo de su implementación en el servidor, errorThrown también contendrá más detalles sobre lo que salió mal. –

+0

+1 Gracias de nuevo. Mucho que aprender, ¡ay! Por cierto, ¿cómo paso los parámetros CGI a la URL? E.g google.com?serach="pizza " – Mawg

14

.get() es simplemente un sinónimo de .ajax() con una serie de opciones de pre-establecido. Use ajax() para obtener la gama completa de opciones, incluida la devolución de llamada error.

$.ajax({ 
type: "GET", 
url: "test.htm", 
error: function(xhr, statusText) { alert("Error: "+statusText); }, 
success: function(msg){ alert("Success: " + msg); } 
} 
); 
+0

+ 1Que muestra lo que un n00b Estoy que no lo sabía. Lo probaré y te responderé. Gracias. – Mawg

+0

Por cierto, ¿cómo paso los parámetros de CGI a la URL. E.g google.com?serach="pizza " – Mawg

+0

Las solicitudes AJAX que fallan en el transporte fallarán silenciosamente (el error solo se invoca si hay un error al analizar su solicitud, pero se recibió correctamente) – 1nfiniti

1

A partir de jQuery 3.0 .success() y .error() se han depreciado.
Puede utilizar .done() y .fail() lugar

$.get(url) 
    .done(function(data, textStatus, jqXHR) { 
     console.log(data); 
    }) 
    .fail(function(jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }); 

Fuente: https://api.jquery.com/jQuery.ajax/

Cuestiones relacionadas