2010-07-27 10 views
12

Quiero alertar al usuario cada vez que hay un error AJAX. Puede hacerlo a través de $.ajaxSetup:

$.ajaxSetup({ 
    error: function() { 
    alert("OOPS!") 
    } 
}); 

But the jQuery docs recommend against this:

Nota: Las funciones de devolución de llamada globales deben pueden establecer con sus respectivos mundiales Ajax métodos de control de eventos -.ajaxStart(), .ajaxStop (), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend() - más bien que dentro del objeto de configuración para $ .ajaxSetup().

así que supongo que tengo que hacer esto:

$("#some_random_div").ajaxError(function() { 
    alert("OOPS!") 
}); 

Esto no tiene sentido para mí: la devolución de llamada de error AJAX se refiere a mi solicitud en su conjunto, no es un elemento de la página específica . Entonces, ¿por qué debería asociarse la función de devolución de llamada con un elemento de página individual?

Entonces, ¿por qué los documentos de jQuery recomiendan usar lo que parece ser un enfoque menos legible, y qué enfoque es el mejor?

+0

prefiero ajaxSetup para este propósito. – Kris

Respuesta

7

El uso típico es que el elemento de página específica que ates ajaxError se va a mostrar a la div dónde va su mensaje de error ; tal vez un mensaje "flash" div en la parte superior de su página. De esta manera tiene acceso directo a ese div para agregar su mensaje.

Pero si no está utilizando un elemento DOM en particular como área de visualización de mensajes, sin duda podría vincularlo a $(document) o algún otro elemento global.

+2

A partir del jQuery 1.9, los eventos ajax solo deberían usarse en 'document' de todos modos, por lo que debería leer' '$ (document) .ajaxError (function() {...})' or '$ (document) .on (" ajaxError ", function() {...})'. La razón por la que los documentos dicen que no se use '$ .ajaxSetup()' para esto es que son solo las configuraciones * predeterminadas * para una solicitud; cualquier solicitud que defina su propio manejador de 'error' superaría al conjunto establecido en' $.ajaxSetup() 'que probablemente no sea lo que querías. –

0

Puede cablear la función de error a todo el cuerpo como esto:

$('body').ajaxError(function() { 
    alert("OOPS!") 
}); 
+1

¿Pero no es menos legible que el enfoque 'ajaxSetup()'? Es decir, la función aquí no tiene * nada que ver con el cuerpo del documento (dicho de otra manera, si pudiera lograr el mismo efecto exacto sustituyendo "cualquier otro elemento" por "cuerpo", este parece ser el enfoque incorrecto) –

0

Puede haber circunstancias en las que podría estar relacionado con un control individual, como cuando tiene un autocompletar que redirige viajes a la base de datos a través de ajax, en oposición a una página completa como en un envío. Esto determinaría si desea aislar el error en un componente de la página y, de ser así, cuál debería ser la respuesta al error en lugar de un enfoque más genérico.


Cuestiones relacionadas