type success example error javascript jquery ajax

javascript - success - Deshabilitar algunos manejadores de eventos Ajax globales jQuery para una solicitud



ajax web (4)

Cuando mira esta declaración if de la fuente jquery / ajax https://github.com/jquery/jquery/blob/master/src/ajax.js#L579-582 , que es una de muchas de la misma clase, Está claro que su problema no puede resolverse solo con un parámetro jquery.

Mi sugerencia sería:

  • establecer global en falso, como dijo Vaibhav Gupta

  • asigna tus manejadores globales a local en la llamada específica ajax y dispara el evento global a través del método $ .event.trigger

Muestra:

$.ajax({ url: "test.html", global: false, beforeSend: function(){$.event.trigger(''ajaxStart'');}, complete: function(){$.event.trigger(''ajaxStop'');}, error: your_error_handler });

Supongamos que tengo definidos algunos manejadores de eventos Ajax globales (ajaxStart, ajaxStop y ajaxError). Normalmente estoy de acuerdo con eso, pero para una solicitud, quiero deshabilitar el controlador ajaxError pero aún ejecutar los controladores ajaxStart y ajaxStop como de costumbre. La documentación de la función jQuery ajax menciona el parámetro "global" que se puede configurar como falso y se pasa a la función $ .ajax para deshabilitar todos los controladores de eventos Ajax globales, pero no mencionan ninguna forma de desactivar solo algunos controladores globales.

Puedo evitar el controlador ajaxError haciendo una prueba en la propiedad "url" del objeto ajaxSettings que se pasa a la función ajaxError, pero parece algo torpe. ¿Alguien aquí sabe de una forma de desactivar la ejecución de la función ajaxError que sería evidente para alguien que esté mirando el lugar donde se llama a la función $ .ajax?

Puedo proporcionar un ejemplo simple si alguien quiere verlo.


Es posible y no es difícil de hacer.

Solo necesita configurar su controlador de errores global ( .ajaxError ) para recibir algunos de los parámetros que jQuery le puede proporcionar:

$("div.log").ajaxError(function(evt, xhr, settings) { if(settings.suppressErrors) { return; } // Normal processing });

Después de esto, puede agregar suppressErrors: true a la configuración de cualquier solicitud AJAX que realice, y si falla, el controlador de errores regresará sin hacer lo que normalmente hace.

Véalo en acción .


Puede establecer $.event.global.ajaxError en false para desactivar la invocación de la devolución de llamada de error global temporalmente. Utilice el error y complete devoluciones de llamada de su solicitud especial para establecer las banderas:

$.ajax({ url: ''some.domain.com/'', }).error(function(jXHR){ // Disable global error logging $.event.global.ajaxError = false; }).complete(function(){ // Enable global error logging $.event.global.ajaxError = true; });

Un ejemplo está disponible en jsFiddle .

Dicho esto, quiero agregar que aún preferiría la propuesta de Jon. Esta técnica requiere establecer el indicador en 2 lugares de los cuales se podría olvidar uno y y hasta tener los controladores globales desactivados accidentalmente. La otra razón es que se debe garantizar que la técnica de Jon funcione en todos los lanzamientos de jQuery donde la configuración de algunos indicadores internos no es confiable.


intenta usar global: false en tu solicitud de ajax como:

$.ajax({ url: "test.html", global: false, // ... });

fuente :: http://docs.jquery.com/Ajax_Events

Busque eventos globales.