2009-12-16 4 views
5

Tengo un código AJAX complicado en un formulario, y a veces fallará (no pregunto por qué, no puedo evitarlo). Cuando esto sucede, necesito atrapar el error, restablecer un indicador de campo oculto y enviar el formulario de forma natural para que el usuario no tenga una experiencia desagradable. ¡Planeé usar window.onerror para hacer esto, pero nunca se dispara! Estoy usando IE8 y todo lo que tengo que preocuparme es el navegador IE. ¿Hay algún problema para hacer que este evento funcione? Aquí está mi código ...window.onerror no funciona

window.onerror = function() { 
    alert("Error!"); 
    document.getElementById("hidAjax").value = "0"; 
    document.forms[0].submit(); 
} 
+1

Esperaría 'throw 'test"; 'para activar este controlador. No es asi. –

Respuesta

12

"Un problema común que afecta a muchos desarrolladores ocurre cuando no se llama a su controlador onerror porque tienen habilitada la depuración de scripts para Internet Explorer. Este será el caso predeterminado si ha instalado Microsoft Script Debugger o Microsoft Visual Studio 6.0 ® (específicamente Visual InterDev 6.0 ™) - el manejo del error es la forma en que estos productos inician su depurador. Puede deshabilitar la depuración de scripts para una instancia determinada de Internet Explorer en la pestaña Avanzado del cuadro de diálogo Opciones de Internet (tenga en cuenta que verifique la configuración Deshabilitar la secuencia de comandos se aplicará únicamente a dicha instancia de Internet Explorer):"

http://msdn.microsoft.com/en-us/library/ms976144.aspx

+0

Dispara, ¡Ni siquiera pensé en eso! Entonces, ¿mis usuarios tendrán que desactivar esta configuración? –

+0

Sí, y como no puede depender de su entorno, deberá buscar otra forma de hacerlo. try/catch, probablemente funcione muy bien para ti, con el bloque catch que contiene todo en tu función onerror actual. – MikeEL

+0

acabo de leer su otro comentario ... ¿quizás podría consultar su base de usuarios y ver si tienen este conjunto? si es solo un pequeño grupo de usuarios en este caso, puede establecerlo como una estipulación que necesitan para desactivarlo. También debería poder verificar si tienen ese conjunto y mostrarles un mensaje informativo sobre qué hacer para desactivarlo. – MikeEL

0

¿Alguna razón para no poner a prueba/atrapar el complicado código?

+1

Hay un * ton * de código; se divide en muchas funciones en muchos archivos. –

+4

try/catch no funciona con solicitudes asynch. –

+0

Porque ese no es el uso adecuado para ningún paradigma de manejo de excepciones. Simplemente envolviendo el código en un manejador de excepciones, pierde la capacidad de saber exactamente dónde está el código deficiente y escribe un código más descuidado como resultado. El manejo de excepciones solo se debe utilizar cuando haya hecho todo lo posible como desarrollador para evitar una excepción de tiempo de ejecución y el código aún puede fallar. –

2

try/catch también introduce un objeto de error adicional que solo tiene el alcance de la captura. En aplicaciones donde el rendimiento importa, esta no es una buena idea.