2015-09-21 14 views
6

ho questo codice:AjaxComplete chiamato a spesso

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

ho aperto la scheda di rete di cromo e posso vedere una sola voce (stato 200).

Ma i display della consolle:

(28) test 

Perché è eseguito questo spesso?

risposta

1

I trigger ajaxComplete quando viene completata una richiesta AJAX, anche se è riuscita o meno.
Il numero 200 status code indica che la richiesta è andata a buon fine, ma, come si può leggere in jQuery docs, la richiamata verrà attivata ogni volta che una richiesta AJAX ha terminato.

Quindi, è possibile verificare quale URL è la vostra richiesta di reindirizzamento e gestire solo quelli che è necessario.

In ogni caso (solo una nota a margine) Si utilizzerà la funzione di callback integrata AJAXcomplete, qualcosa di simile:

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

Nella propria rete orktab c'è solo una voce. Non vi è alcuna voce con altro stato di 200. console.log (settings.url) visualizza 28 volte lo stesso url, ma questa richiesta di ajax viene inviata solo una volta. – phpjssql

+0

'ajaxComplete' si attiva ogni volta, potrebbe essere un plugin che utilizza ajax in dietro. Ti suggerisco di utilizzare la funzione di callback 'AJAX complete', se puoi – CapitanFindus

+0

Sono in grado di usare solo ajaxComplete. C'è qualche possibilità di verificare se si tratta della stessa richiesta, forse di un id? Non riesco a controllare l'url perché può essere richiesto più volte. – phpjssql

1

È possibile controllare gli URL di questi ajax'es e gestire necessario solo:

$(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); 
    } 
}); 

Bind solo una volta quando il documento pronto:

$(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

Ottengo 28 volte lo stesso url, ma questa richiesta di ajax viene inviata solo una volta. – phpjssql

+0

@phpjssql assicurati di associare il gestore solo una volta – Grievoushead

+0

quando inserisco $ (documento) .unbind ('ajaxComplete'); prima che il mio codice funzioni. Ma come potrei risolvere questo problema senza slegare i completamenti esistenti? – phpjssql

Problemi correlati