2010-05-26 8 views
12

Ho una pagina in cui posso inserire alcuni javascript/jquery per manipolare l'output. Non ho altri controlli sul markup della pagina, ecc.Come posso rilevare che una qualsiasi richiesta ajax viene completata utilizzando jQuery?

Ho bisogno di aggiungere un elemento extra tramite jquery dopo ogni presente sulla pagina. Il problema è che gli elementi vengono generati tramite una chiamata asincrona sulla pagina esistente che si verifica dopo che $ (document) .ready è completo.

In sostanza, ho bisogno di un modo per chiamare il mio jQuery dopo che la pagina è stata caricata e le successive chiamate ajax sono state completate. C'è un modo per rilevare il completamento di qualsiasi chiamata ajax sulla pagina e quindi chiamare la mia funzione personalizzata per inserire gli elementi aggiuntivi dopo i nuovi s creati?

+0

Ho frainteso, pensavo che stavate effettivamente usando '$ .ajax()', vorrei aggiungere i dettagli del punto di condivisione qui, dato che cambia notevolmente la domanda ... Non sono sicuro di cosa succederebbe se * qualsiasi * evento si accenda , potresti dover eseguire il polling per vedere se è presente un oggetto caricato dinamicamente per fare ciò che vuoi. –

+0

Nick, penso in relazione alla query originale affermando "jQuery" nel titolo la tua ipotesi era corretta. Non riesco più a vedere la tua risposta, ma se hai letto il riferimento a $ .ajaxComplete accetterò felicemente la risposta. –

+0

Non ho cancellato la risposta nel caso in cui fosse utile ai futuri googler che potrebbero imbattersi in questo * che * stanno facendo il caricamento dell'ajax via jQuery ... scusa non c'è un modo chiaro per farlo con SharePoint, almeno sul client ... potrebbe esserci qualche opzione lato server per chiamare un metodo specifico. –

risposta

43

Purtroppo questo non vale in quanto sembra che il PO non utilizza$.ajax()o qualsiasi altro metodo ajax jQuery per caricare effettivamente il contenuto, ma lasciando qui nel caso futuro googler di stanno facendo questo.


È possibile utilizzare any of the global ajax events that meet your needs here, siete probabilmente dopo $.ajaxComplete() o $.ajaxSuccess().

Ad esempio:

$(document).ajaxSuccess(function() { 
    alert("An individual AJAX call has completed successfully"); 
}); 
//or... 
$(document).ajaxComplete(function() { 
    alert("ALL current AJAX calls have completed"); 
}); 

Se si desidera eseguire solo alcuni funzione generica quindi fissare loro di documentare (sono solo gli eventi sotto). Se si desidera mostrare qualcosa in particolare, ad esempio un modale o messaggio, è possibile utilizzare loro un po 'più ordinato (anche se questo non sembra essere quello che stai dopo), in questo modo:

$("#myModal").ajaxComplete(function() { 
    $(this).fadeIn().delay(1000).fadeOut(); 
}); 
+0

Ciao Nick, ho provato il tuo esempio e ho tentato di usare l'ajaxSuccess prima, ma senza fortuna. Penso che il tuo esempio sia corretto ma non sta facendo un allarme per me. Per aggiungere un po 'più di sfondo; Sto tentando di aggiungere più elementi all'output di una webpart standard di Sharepoint. La webpart elenca una serie di documenti sotto un gruppo genitore/figlio. Inizialmente la pagina viene caricata con gli elementi parent e quindi chiama una richiesta Ajax per caricare i documenti figli. È a questo punto che non riesco a rilevare la chiamata ajax per applicare jquery agli elementi di ritorno. –

+1

Per i guuglers è anche la funzione: $ (documento) .ajaxStart (function() { – user956584

+1

Ecco cosa uso [jquery.ajax.tracker] (https://github.com/jmb-mage/ajax-request-tracker/blob /master/jquery.ajax.tracker.js) –

1

Come potrei capire, stai usando la funzione Ajax di jQuery nel tuo gestore pronto. Quindi potresti semplicemente passare un'altra funzione, che sarà invocata dopo che la tua funzione Ajax avrà ricevuto una risposta. Per esempio

$(document).ready(function(){ 
    $("#some_div").load('/some_url/', function(){ 
     /* Your code goes here */ 
    }); 
}); 
1

Questo esempio dimostra e nasconde elementi all'inizio e alla fine del ajax chiamate utilizzando jQuery:

$("#contentLoading").ajaxSend(function(r, s) { 
     $(this).show(); 
     $("#ready").hide(); 
    }); 

    $("#contentLoading").ajaxStop(function(r, s) { 
     $(this).hide(); 
     $("#ready").show(); 
    }); 

#contentLoading è un indicatore immagini gif avanzamento.

1

È possibile riscrivere la funzione send() dell'oggetto XMLHttpRequest.

Vedere una soluzione per fare così usando puro Javascript here.

Problemi correlati