jQuery .load () warte bis der Inhalt geladen ist

8

Ich möchte Webseiten so gestalten, dass sie ineinander gleiten. Also habe ich $ ('a') gemacht. Click (); Funktion, die prüft, ob die Verbindung lokal ist und ob sie eine Verknüpfung href erhält und sie in den Hauptteil lädt.

%Vor%

Sieht gut aus, aber auf meiner Seite sind auch viele js Plugins enthalten. Die Ausführung von ihnen dauert eine Weile, und .load action zeigt zuerst "unverändert durch den Inhalt von js" und dann js. Es verursacht ein schlechtes Flickr des Inhalts.

Ist es möglich, neuen Inhalt mit der ganzen Ausführung von JS zu cachen, den alten Körper nicht zu ändern, bis er fertig ist, und wenn alle DOM und JS auf NEW Inhalt gemacht sind, alten Inhalt ausschieben und neuen einfügen?

edit: Ich denke, es geht nicht darum, die js-Ausführung zu erkennen, sondern zu prüfen, ob alle zusätzlichen Dateien geladen sind - DOM-Änderungen sollten zur gleichen Zeit ausgelöst werden, zu der $ (window) .load der neuen Datei wäre.

[Bearbeiten] ----------------------------------------- -----------------------------

Meine Lösung dafür war CSS-Code (css wird immer geladen, bevor Dom erstellt wird), die Browser-Opazität 0 hat.

%Vor%

Und es verhindert in der Regel, aber nicht immer, das schlechte Flickr des Inhalts. Jetzt ist es möglich, irgendwie zu erkennen, dass Inhalt von jQuery ajax geladen wird und einige Show-Timeouts und so weiter anwenden. Aber in der Tat ist die Frage noch offen.

Um nun ein etwas einfacheres Beispiel für diese Frage zu machen:

Wie beginne ich, DOM nach $ ('body') zu ändern. load ('something.php') 3000ms nach dem Klicken auf den Link, der fire .load ('something.php') funktioniert? (Das Laden sollte sofort nach dem Klicken gestartet werden, aber das Ändern des DOM muss später eingeleitet werden)

    
user1785870 03.12.2012, 21:32
quelle

4 Antworten

1

Vielleicht sollten Sie Versprechungen verwenden und so etwas ausprobieren:

%Vor%     
Roumelis George 15.12.2014 08:32
quelle
0

Die Funktion .load stellt einen zweiten Parameter zur Verfügung, eine Funktion, die aufgerufen wird, wenn die Operation abgeschlossen ist. Sie können damit im Wesentlichen alle Ihre Operationen synchronisieren, die auf den Abschluss des Ajax-Aufrufs angewiesen sind oder warten müssen. Etwas wie das:

%Vor%

Bearbeiten: Wie adeneo in den Kommentaren darauf hingewiesen hat, sehen Sie sich die Dokumentation an.

    
Paul Richter 04.12.2012 00:33
quelle
0

Eine Sache, die helfen könnte, ist Ihren HTML-Code zu setzen innerhalb eines Skript-Tags mit einem benutzerdefinierten Typ (oder um Ihr HTML in das Skript-Tag zu laden)

so:

%Vor%

Der HTML-Code im Inneren wird vom Dom nicht verstanden, bis Sie ihn an die Seite anfügen

%Vor%

Ajos!

    
Abdoul Sy 17.06.2013 13:27
quelle
0

Verwenden Sie nicht .load (). Diese Methode macht genau das, was du vermeiden willst.

Versuchen Sie Folgendes:

  1. Laden Sie mit $ .get, $ .post, $ .ajax oder welcher Methode auch immer zu Ihnen passt. Auf diese Weise erhalten Sie den HTML-Code mit den Skripten als HTML-String.
  2. Erstellen Sie ein verstecktes div oder transparentes div oder ein anderes Element, um den Inhalt einzufügen. Hier besteht der Trick darin, sicherzustellen, dass dieses div nicht angezeigt wird, bis die Skripte ausgeführt werden. Die einzige Möglichkeit besteht darin, auf jeder Seite, die Sie auf diese Weise laden wollen, ein letztes Skript hinzuzufügen, mit einer Funktion, die den alten Inhalt entfernt und den neuen anzeigt. Da es das letzte Skript ist, wird es erst ausgeführt, wenn die anderen es tun, also sollte Ihr DOM bereit sein.

Natürlich, wenn Ihre Skripte auf etwas wie $ (document) .ready () angewiesen sind, wird dies nicht funktionieren, da dies sofort ausgeführt wird. Bilder haben das gleiche Problem. Sie werden asynchron geladen, so dass Sie nicht wissen, wann alle geladen sind, außer wenn Sie einen Handler an das onload-Ereignis jedes Bildes anhängen, was keine gute Idee ist.

    
Oscar Paz 28.02.2014 20:33
quelle

Tags und Links