2015-09-21 14 views
6

mam ten kod:AjaxComplete nazywa się często

$(document).ajaxComplete(function(event, xhr, settings) { 
    console.log('test'); 
}); 

Otworzyłem kartę sieciową chrom i widzę tylko jeden wpis (stan 200).

ale wyświetlacze konsoli:

(28) test 

Dlaczego jest to często wykonywane?

Odpowiedz

1

Funkcja ajaxComplete uruchamia się po zakończeniu każdego żądania AJAX, nawet jeśli zakończyło się pomyślnie lub nie.
Urządzenie 200 status code oznacza, że ​​żądanie zostało odebrane poprawnie, ale jak można przeczytać w artykule jQuery docs, wywołanie zwrotne będzie uruchamiane za każdym razem, gdy zakończy się żądanie AJAX.

Możesz więc sprawdzić, do jakiego adresu URL przekierowuje Twoje żądanie i obsługiwać tylko te, których potrzebujesz.

Anyway (tak na marginesie) Będę korzystać z wbudowanego w AJAX funkcji zwrotnej complete, coś takiego:

$.ajax({ 
    url: url, 
    data: { data }, 
    complete:function(){ 
     console.log('test'); 
    } 
}); 
+0

W macierzyst orktab jest tylko jeden wpis. Nie ma wpisu o innym statusie niż 200. console.log (settings.url) wyświetla 28 razy ten sam URL, ale to żądanie ajax jest wysyłane tylko raz. – phpjssql

+0

'ajaxComplete' odpala za każdym razem, może to być plugin używający ajaxa w tyle. Sugeruję, abyś użył callback 'AJAX complete', jeśli możesz – CapitanFindus

+0

Mogę używać tylko ajaxComplete. Czy istnieje możliwość sprawdzenia, czy jest to ta sama prośba, może identyfikator? Nie mogę sprawdzić adresu URL, ponieważ można go zamówić kilka razy. – phpjssql

1

można sprawdzić adresy URL tych ajax'es i obsługiwać tylko potrzebne:

$(document).ajaxComplete(function(event, xhr, settings) { 
    console.log('Ajax request completed for: ' + settings.url); 
    if (settings.url === "ajax/test.html") { 
    $(".log").text("Triggered ajaxComplete handler. The result is " + 
     xhr.responseText); 
    } 
}); 

powiązać go tylko raz, gdy dokument gotowy:

$(function() { 
    $(document).ajaxComplete(function(event, xhr, settings) { 
     console.log('Ajax request completed for: ' + settings.url); 
     if (settings.url === "ajax/test.html") { 
     $(".log").text("Triggered ajaxComplete handler. The result is " + 
      xhr.responseText); 
     } 
    }); 
}); 
+0

Otrzymuję 28 razy ten sam URL, ale to żądanie ajax jest wysyłane tylko raz. – phpjssql

+0

@phpjssql upewnij się, że bind handler tylko raz – Grievoushead

+0

po umieszczeniu $ (document) .unbind ("ajaxComplete"); zanim mój kod zadziała. Ale jak mogę rozwiązać ten problem, bez odrywania istniejących zakończeń? – phpjssql