Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
Manejo de errores genéricos jQuery ajax y caso por caso

Tengo un controlador de error ajax genérico escrito así:

 $('html').ajaxError(function(e, xhr, settings, exception) { var message = ''; if (xhr.status == 0) { message = 'You are offline!\n Please check your network.'; } else if (xhr.status == 403) { window.location.href = $('#logon').attr('href'); } else if (xhr.status == 404) { message = 'Requested URL not found.'; } else if (xhr.status == 500) { message = xhr.responseText; $('#cboxLoadedContent div.news_article_content').append('<p>' + message + '</p>'); try {//Error handling for POST calls message = JSON.parse(xhr.responseText); } catch (ex) {//Error handling for GET calls message = xhr.responseText; } } else if (errStatus == 'parsererror') { message = 'Error.\nParsing JSON Request failed.'; } else if (errStatus == 'timeout') { message = 'Request timed out.\nPlease try later'; } else { message = ('Unknown Error.\n' + xhr.responseText); } if (message != '' && xhr.status != 500) { message = message; } if (xhr.status != 403) { $('#icis_dashboard').append('<p id="ajax_error_msg" class="offScreen">' + message + '</p>'); errorBox({ inline: true, width: 0, href: '#ajax_error_msg', onLoadCall: function() { $('#cboxLoadedContent').jScrollPaneRemove(); }, onCleanupCall: function() { $('#ajax_error_msg').remove(); } }); } });

Entonces, cuando el error no es 403, se muestra un cuadro de diálogo con texto relacionado con el error.

Esto está bien, pero lo que me gustaría hacer es tener el controlador genérico como respaldo y luego tratar cada error de forma individual dentro de la llamada ajax original.

Entonces, como el controlador de respaldo alerta a "barra" en un 404, me gustaría alertar a "foo" en su lugar:

 error: function(xhr) { if (xhr.status == 404) { //window.location.href = $('#logon').attr('href'); alert("foo"); } }

Yo sthere de todos modos para hacer esto? No sé cómo evitar que se active la copia de seguridad, ya que ambos parecen activarse en este momento.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede establecer la propiedad ajax "global" en falso en la función ajax que maneja su propio error. Eso debería evitar el manejo global de errores. Consulte: http://api.jquery.com/jQuery.ajax#toptions .

over 4 years ago · Santiago Trujillo Denunciar

0

No creo que puedas controlar esto con jQuery. El ajaxError global se llama en cualquier error que ocurra durante una llamada ajax. Sin embargo, la devolución de llamada de error "local" se llama antes que la devolución de llamada global, por lo que puede establecer una variable que le indique a la devolución de llamada global que no se ejecute.

Por ejemplo:

 var handledLocally = false; $('html').ajaxError(function(e, xhr, settings, exception) { if (!handledLocally){ //run the normal error callback code and the reset handledLocally } }); error: function(){ //set handledLocally to true to let the global callback it has been taken care of handledLocally = true; }

Puede ver este jsFiddle que muestra cómo se puede lograr esto (asegúrese de hacer clic en ejecutar en la parte superior antes de hacer clic en los enlaces): http://jsfiddle.net/e7By8/

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que establecer una variable global es una mala idea porque puede tener varias solicitudes de ajax al mismo tiempo. Como se mencionó, la devolución de llamada de error "local" se llama antes de la devolución de llamada global. Mi solución es simplemente adjuntar alguna propiedad personalizada al objeto jqXHR, por ejemplo , handleLocally y configurarlo como verdadero en su controlador local y verificarlo en el controlador global.

manejo local:

 $.ajax({ //some settings error:function(jqXHR, textStatus, errorThrown){ //handle and after set jqXHR.handledLocally = true } })

manejo mundial:

 $(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) { if (jqXHR.handledLocally)) { return; } //handle global error })
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda