2009-07-31 12 views
3

Es scheint (für mich) wie JavaScript-Anweisungen nicht immer hintereinander zu laufen. Ich weiß, dass sie das tun, aber manchmal scheint es, als würde eine show() -Funktion gleichzeitig mit hide() ausgelöst, so dass die Logik fehlschlägt. Es gibt Callback-Funktionen zu verwenden, wie jQuery.load ("some.html", dannrunthis) ..Reihenfolge der Auswertung in JavaScript-Code mit Ajax?

Ich muss die Arbeitslogik verstehen. irgendwelche Hilfe/führt?

thx im Voraus

+0

@Ionut: Ich dachte eigentlich, der ursprüngliche Frage Titel war besser. Der Ausdruck "Reihenfolge der Bewertung" ist ein wenig irreführend. –

+0

@William, wahrscheinlich. Sie können es natürlich bearbeiten, nachdem Sie die am besten passende Antwort gegeben haben. Das ist das Beste, was ich mir ausgedacht habe. –

+0

danke .. wusste nicht, wie ich es eigentlich nennen soll. :) –

Antwort

-1

Rückrufe sind gut, weil sie den Browser ein Blockieren und unbrauchbar wird bei der Arbeit verhindern. Es erlaubt dem Browser, immer noch benutzbar zu sein und dann weiter an dem JavaScript zu arbeiten, wenn das vorherige Ding fertig ist, weil es die Arbeit asynchron bearbeitet.

jQuery.load("some.html",thenrunthis); 

Wenn die thenrunthis nicht da war und das Laden von some.html eine nahm, während die Person den Browser könnte nicht verwenden, bis es fertig geladen wurde

+0

Ihre Aussage ist nicht wirklich wahr. Callbacks verhindern nicht, dass der Browser während der Arbeit blockiert und unbrauchbar wird. Nur die AJAX-Funktionalität ist asynchron. Jeder andere Rückruf wird einfach aufgerufen, wenn die ursprüngliche Methode beendet ist. –

+0

'Wenn die thenrunthis nicht da war und das Laden von some.html dauerte eine Weile konnte die Person den Browser nicht verwenden, bis es geladen wurde' Nicht unbedingt korrekt - der Browser wäre noch verwendbar, aber das Javascript wäre nicht kann auf die Beendigung der Ladeoperation reagieren. – belugabob

1

Callback-Funktionen sind in der Regel mit asynchronen Ereignissen - und jQuery.load ist ein gutes Beispiel.

Wenn Sie eine solche Funktion aufrufen, ist das Ergebnis des Aufrufs nicht sofort verfügbar, obwohl die Steuerung fast sofort an den aufrufenden Code zurückgegeben werden kann. Der Zweck der Bereitstellung einer Callback-Funktion ist zu sagen: "Gehen Sie und machen Sie diese Operation, und wenn Sie fertig sind, führen Sie diesen Code aus, um die Ergebnisse zu verarbeiten. In der Zwischenzeit bin ich unterwegs und mache etwas anderes.

Macht das Sinn?

1

Einige Funktionen haben Callbacks, weil sie asynchron sind.

Szenario. In Javascript möchten Sie den Inhalt von einer anderen HTML-Seite erhalten. Sie rufen diese Seite auf, aber der Server ist sehr langsam. Möchten Sie, dass der JavaScript-Methodenaufruf zu diesem Zeitpunkt anhält und die weitere Ausführung verhindert? Antwort, nein. Das ist keine sehr nette Sache für den Benutzer.

Geben Sie den asynchronen Methodenaufruf ein. Wenn Sie Seite x aufrufen, anstatt darauf zu warten, dass das zurückkehrt, bewegt sich das Skript gerade weiter. Dies verhindert, dass der Browser des Benutzers gesperrt wird. Es wird jedoch eine Rückrufmethode angegeben, sodass, wenn die Daten tatsächlich zurückkommen, eine Aktion ausgeführt werden kann. Dadurch kann die Seite nicht durch möglicherweise lange Vorgänge blockiert werden.

Sinn machen?

6

Sie fragen wirklich nach dem "A" in AJAX. Es steht für asynchron und ermöglicht es Ihnen, eine Anfrage ohne blocking zu stellen. Die Callback-Funktion wird ausgeführt, wenn die Anforderung erfolgreich ist, der Rest des Codes jedoch weiterhin ausgeführt wird. Einer der Hauptvorteile dieses Ansatzes ist die Reaktionsfähigkeit der Benutzeroberfläche. Ein synchroner Aufruf wird den Browser im Wesentlichen einfrieren, bis Ihre Anfrage zurückkehrt, was eine Weile dauern könnte.

Bearbeiten: Um ein wenig auf meine ursprüngliche Antwort zu erweitern, dachte ich, ich würde darauf hinweisen, dass Callback-Funktionen nicht auf AJAX-Anfragen beschränkt sind. Da Sie anscheinend jQuery verwenden, sollten Sie sich die jQuery Events API für weitere Beispiele ansehen, die Rückrufe verwenden.

Beispiel: Angenommen, Sie möchten auf bestimmte Weise reagieren, wenn ein Texteingabefeld den Fokus erhält.Hier ist ein Beispiel direkt aus den jQuery documentation, in dem eine Callback-Funktion verwendet wird, um ein input Element zu reagieren Fokus erhält:

$("input").focus(function() { 
    $(this).next("span").css('display','inline').fadeOut(1000); 
}); 

Diese Funktion ist wirklich eine Callback-Funktion. Es wird aufgerufen, wenn der Benutzer ein input Element auf der Seite auswählt. Es gibt eine funktionierende Demonstration des obigen Codes in Aktion here.

+0

Ich sollte auch sagen, dass ich erkenne, dass Callback-Funktionen für viele Gründe anders als AJAX-Anfragen verwendet werden, aber das OP scheint speziell nach 'jQuery.load' zu fragen. Deshalb habe ich meine Antwort im Rahmen einer AJAX-Anfrage eingerahmt. –

+0

Sie möchten diesen besonderen Aspekt für das OP hervorheben, d. H. Den Unterschied zwischen Rückrufen, die in einem Ajax-Kontext verwendet werden, gegenüber den anderen Kontexten. +1 sonst –

2

Rückrufe werden in JavaScript verwendet, und jede Sprache in der Tat zu einem Stück Code zu sagen, was zu tun ist, wenn ein bestimmtes Ereignis auftritt. Es verhindert, dass der gesamte Code in ein großes Chaos gerät.

Siehe den Eintrag wikipedia.

1

Theoretisch ist es nicht garantiert, dass die JavaScript-Anweisungen ausgeführt werden, nachdem die Seite vollständig geladen wurde. Ein Thread-Browser kann wählen, das Javascript beim Rendern des HTML auszuführen.

Callbacks sind eine Möglichkeit, Aufrufe von Javascript-Anweisungen zu synchronisieren. Sie stellen sicher, dass der Code nach bestimmten Ereignissen in einer vordefinierten Reihenfolge ausgeführt wird (z. B. "Die Seite wird vollständig geladen").

Verwandte Themen