2009-05-27 2 views
2

Ich fragte kürzlich, wie man erkennt, wenn alle Ressourcen einer Seite geladen wurden, wie Bilder und Stylesheets. Die Antwort kam zurück, benutze $ (window) .load(); Methode in jQuery.Erkennen, wenn über AJax geladene Ressourcen

Meine Frage ist jetzt, wie erkenne ich, wenn Inhalt über AJAX geladen wird. AJAX injiziert einige img-Elemente in das DOM ... wie kann ich feststellen, wann diese Bilder geladen sind?

Antwort

2

In der Funktion $.get() oder $.post() können Sie den Namen einer Funktion angeben, die aufgerufen wird, wenn die Ajax-Anforderung abgeschlossen ist. Zum Beispiel:

$.get("something.php",{data:'test'},foo); 

function foo() 
{ 
    // This function will be called when the request has completed 
} 

Oder:

$.get("something.php",{data:'test'},function() 
    { 
    //This function will be called in the same way 
    } 

); 
+0

ich muss wissen nicht, wann die AJAX-Anforderung abgeschlossen ist, da die AJAX-Request HTML zurückkehren wird, und dann wird der Browser holen gehen die Ich bin Alter. –

+0

Ich kann falsch liegen, aber wenn Sie wissen, die Höhe und Breite des Bildes erwartet (vielleicht kann es in der HTML/JSON vom Server zurückgegeben werden), in der Callback-Funktion können Sie eine while-Schleife, die überprüft, ob $ ("#img"). attr ("Höhe") oder dergleichen entspricht der erwarteten Höhe. Wenn dies der Fall ist, könnte dies bedeuten, dass das Bild vollständig geladen wurde. –

+0

Leider ist das nicht dynamisch genug, da dies Benutzerinhalte sind, die in jeder Größe kommen können ... –

0

Erkennen, wenn ein Ajax holen ist einfach: Verwenden Sie die Ajax Events in jQuery definiert: http://docs.jquery.com/Ajax

Aber ich bin nicht sicher, dass Sie das fragen gleiche Sache. Um festzustellen, wann ein Bild geladen wird (vermutlich entspricht dies einem Ereignis, wenn das src-Attribut des Bildes geändert wird), können Sie Mutationsereignisse verwenden. http://wiki.github.com/jollytoad/jquery.mutation-events Prost,

jrh.

+0

Die Bilder src würden immer auf die Ressource gesetzt ... wenn die Ressource abgerufen wird, wird sie sich nicht ändern. –

2

Wenn Sie $.ajax Aufruf können Sie einen Satz haben eine Callback-Funktion für eine erfolgreiche Anfrage:

$.ajax({ 
    url: _url, 
    type: _type, 
    data: _data, 
    dataType: _dataType, 
    success: _success 
}) 

var _success = function(result) { 
    $html = $(result); 
    alert('HTML downloaded'); 

    // inject HTML into DOM here 
} 

Sie brauchen werden durch $ html zu gehen, um die Bildelemente zu erhalten und für jeden der Bilder registrieren Sie die Callback-Funktion Last, die ausgelöst wird, wenn ein Bild geladen hatte:

$('#myImage').load(function() { 
    alert('Image Loaded'); 
}); 
+0

Die Bilder werden nicht sofort nach dem AJAX-Aufruf geladen. Das DOM wird aktualisiert und die Ressourcen werden abgerufen. –

+0

Aah ich sehe. Ich habe die Antwort etwas aktualisiert, die dich auf den richtigen Weg bringen sollte. – aleemb

+0

Ich werde versuchen, diese Funktion zu verwenden, um die Bildanzahl an die Anzahl geladener Bilder anzupassen, danke ... –

Verwandte Themen