2014-04-01 13 views
5

Mam globalnej obsługi błędów AJAX, tutaj:JQuery Ajax - Jak powstrzymać globalne obsługi błędów dynamicznie

function SetAjaxErrorHandler() { 
    $(document).ajaxError(function (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxSettings: JQueryAjaxSettings, thrownError: string) { 
     console.log("in error"); 
     // Call error API to log 
     var url1 = appSettings["errorLogApiUrl"]; 
     $.ajax({ 
      type: "POST", 
      url: url1 + "s", 
      data: jqXHR.responseText, 
      contentType: "application/json; charset=utf-8", 
      error: (jqXhr) => { 
      // I dont want the global error handler to be triggered here! 
     } 
    }); 
}); 

}

Jak widać, na razie nie jest błąd nazywając jedną z inne wywołania ajax na stronie, próbuję wykonać inne wywołanie API, aby zalogować to na serwerze. Jeśli jednak wywołanie logu błędu nie powiedzie się, zostanie złapany w pętli rekursywnej. Moje pytanie brzmi: w moim wywołaniu ajax w metodzie ajaxError(), czy istnieje sposób na zatrzymanie globalnej obsługi błędów?

tl; dr jest sposób na użycie globalnej obsługi błędów ajax dla niektórych wywołań ajax, ale stłumić go dla innych?

Odpowiedz

3

Tak, można ustawić global do false w zaproszeniu $.ajax():

$.ajax({ 
    url: 'path/to/url', 
    global: false 
}); 

od .ajaxError() docs:

Jeśli $.ajax() lub $.ajaxSetup() jest wywoływana z opcją global ustawiony false, metoda .ajaxError() nie uruchomi się.

2

Od docs jQuery:

Jeśli $ .ajax() lub $ .ajaxSetup() jest wywoływana z opcją globalnego ustawiona na false, metoda .ajaxError() nie będzie ogień.

https://api.jquery.com/ajaxError/

Więc dodać global:false

$.ajax({ 
     type: "POST", 
     url: url1 + "s", 
     data: jqXHR.responseText, 
     contentType: "application/json; charset=utf-8", 
     global: false, 
     error: (jqXhr) => { 
     // I dont want the global error handler to be triggered here! 
    } 
Powiązane problemy