Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!