2010-05-26 7 views
12

Ich habe eine Seite, auf der ich etwas Javascript/jquery einfügen kann, um die Ausgabe zu manipulieren. Ich habe keine andere Kontrolle über die Seite Markup etc.Wie kann ich herausfinden, ob eine Ajax-Anfrage mit jQuery abgeschlossen wurde?

Ich muss ein zusätzliches Element über jquery nach jedem Geschenk auf der Seite hinzufügen. Das Problem besteht darin, dass die Elemente über einen asynchronen Aufruf auf der vorhandenen Seite generiert werden, der auftritt, nachdem $ (document) .ready abgeschlossen ist.

Im Wesentlichen brauche ich eine Möglichkeit, meine jquery aufzurufen, nachdem die Seite geladen wurde und die nachfolgenden Ajax-Aufrufe abgeschlossen sind. Gibt es eine Möglichkeit, den Abschluss eines Ajax-Aufrufs auf der Seite zu erkennen und dann meine eigene benutzerdefinierte Funktion aufzurufen, um die zusätzlichen Elemente nach den neu erstellten s einzufügen?

+0

Ich missverstanden, ich dachte, Sie tatsächlich '$ .ajax()' verwenden, würde ich die Sharepoint-Details hier hinzufügen, da dies die Frage stark ändert ... Ich bin nicht sicher, was wenn * any * Ereignisse ausgelöst wird , müssen Sie möglicherweise abfragen, um zu sehen, ob ein dynamisch geladenes Objekt vorhanden ist, um das zu tun, was Sie wollen. –

+0

Nick, ich denke in Bezug auf die ursprüngliche Abfrage, die "jQuery" im Titel angibt, war Ihre Annahme richtig. Ich kann Ihre Antwort nicht mehr sehen, aber wenn Sie den Verweis auf $ .ajaxComplete gelesen haben, akzeptiere ich die Antwort gerne. –

+0

Ich löschte die Antwort für den Fall, dass es zukünftigen Googlern nützlich sein könnte, die * dies * tun * tun, indem sie den Ajax über jQuery laden ... Entschuldigung, es gibt keine klare Methode, dies mit SharePoint zu tun, zumindest auf dem Client ... gibt es möglicherweise eine Option Server-Seite, um eine bestimmte Methode aufzurufen. –

Antwort

43

Leider gilt dies nicht, da es das OP scheint nicht$.ajax()oder jede jQuery Ajax-Methode ist die Verwendung für den Inhalt tatsächlich geladen, aber es hier bei zukünftigen googler verlassen dies tun.


Sie any of the global ajax events that meet your needs here verwenden können, sind Sie wahrscheinlich nach $.ajaxComplete() oder $.ajaxSuccess().

Zum Beispiel:

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

Wenn Sie nur eine generische Funktion dann bringen Sie sie laufen zu dokumentieren (sie sind nur Ereignisse unten). Wenn Sie etwas Bestimmtes zeigen wollen, zum Beispiel eine modale oder eine Nachricht, können Sie sie etwas sauberere verwenden (obwohl dies nicht zu sein scheint, was Sie nach), wie folgt aus:

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

Hallo Nick, ich habe dein Beispiel versucht und versucht, den ajaxSuccess früher, aber ohne Glück zu benutzen. Ich denke, Ihr Beispiel ist korrekt, aber es löst keine Warnung für mich aus. Um etwas mehr Hintergrund hinzuzufügen; Ich versuche, der Ausgabe eines standardmäßigen Sharepoint-Webparts weitere Elemente hinzuzufügen. Das Webpart listet eine Reihe von Dokumenten unter einer übergeordneten/untergeordneten Gruppierung auf. Anfangs lädt die Seite mit den übergeordneten Elementen und ruft dann eine Ajax-Anforderung auf, um die untergeordneten Dokumente zu laden. An diesem Punkt kann ich den Ajax-Aufruf nicht erkennen, um jquery auf die zurückkehrenden Elemente anzuwenden. –

+1

Für guuglers ist auch Funktion: $ (Dokument) .ajaxStart (function() { – user956584

+1

Hier ist, was ich [jquery.ajax.tracker] (https://github.com/jmb-mage/ajax-request-tracker/blob /master/jquery.ajax.tracker.js) –

1

Wie Ich könnte verstehen, dass Sie die Ajax-Funktion von jQuery in Ihrem Bereit-Handler verwenden. Sie könnten also einfach eine andere Funktion übergeben, die aufgerufen wird, nachdem Ihre Ajax-Funktion eine Antwort erhalten hat. Zum Beispiel

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

Dieses Beispiel zeigt nur Elemente und versteckt am Anfang und Ende der Ajax-Aufrufe jQuery:

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

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

#contentLoading ist eine GIF-Bild-Statusanzeige.

1

Sie könnten die send() - Funktion des XMLHttpRequest-Objekts neu schreiben.

Siehe eine Lösung für so tun, nur mit reinem Javascript here.