Frage

Auf meiner Homepage habe ich:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

Via MooTools, erhalte ich diese Ankerelemente von id, so dass, wenn sie angeklickt sind, eine auffällige div unter ihnen Popup-Fenster, das die Anmeldung oder Anmeldeformular enthält (mit Methoden, um die Ausbreitung von Ereignissen natürlich zu stoppen) und beim Auffüllen der Felder der AJAX-Aufruf Kicks - das sollte eine Sitzung erstellen und die Seite neu zu laden, so dass der Benutzer eine visuelles hätte, dass er jetzt angemeldet ist und auf Benutzerebene-Kontrollen erscheinen etc ..

Der Ajax-Aufruf wird von der MooTools AJAX-Klasse und evalScripts Option initiiert wird auf true gesetzt. Die AJAX-Seite gibt das Script-Code:

<script type="text/javascript">window.location = self.location;</script>

Dieses System funktioniert perfekt - jetzt frage ich mich, warum, wenn ich die Anker href Werte ändern meine Skripte href="#" nicht mehr funktionieren

Hat es etwas mit dem Fenster zu tun?

Hat es seine Eigenschaft ändern, wenn ich einen Link geklickt oder so, auch wenn die Ausbreitung des Ereignisses wurde gestoppt ??

War es hilfreich?

Lösung

window.location = self.location;

Dieses Javascript ausgeführt .

Wenn er ausgeführt wird, wird die Browser-Wert von window.location mit einem neuen Wert zu ersetzen, wird gesagt. Nicht alle Browser die gleiche Art und Weise hier reagieren .. Einige werden wahrscheinlich wie erwartet, aber andere werden die beiden Werte get smart darüber und vergleichen. Der Browser weiß , welche Seite es ist auf, und sie weiß, dass Sie fragen nur für ihn auf die gleiche Seite zu gehen.

Browser-Cache

Der Browser hat sogar eine Kopie der aktuellen Seite in Cache . Es kann mit dem Server sprechen und fragen, ob die Seite, um sie im Cache noch gültig ist. Wenn der Cache gültig ist, kann sie beschließen, nicht einen erneuten Laden der Seite zu erzwingen. Hinter den Kulissen geschieht dies mit HTTP-Header. Browser und Server können über HTTP auf vielfältige Weise kommunizieren. In diesem Fall sendet Ihr Browser eine schnelle Anfrage an den Server so etwas wie dies zu sagen:

GET /stackoverflow.com/posts/196643/index.html
HTTP/1.1
Host: www.stackoverflow.com
User-Agent: Mozilla/5.0
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT

Dies ist eine bedingte GET-Anfrage genannt. Indem man sagt, If-Modified-Since , wird Ihr Browser den Worten: "Gib mir die Datei, aber nur, wenn es seit dem letzten Mal geändert wurde ich es gesehen habe."

Lange Rede kurzer Sinn, haben Sie nicht ausdrücklich gesagt, den Browser die Seite neu zu laden.

Hier ist, wie können Sie:

location.reload( true );

Die "true" ist ein optionale Parameter , zwingt Reload . Der Browser wird nicht einmal im Cache aussehen .. Es wird nur das tun, wie Sie sagen.

Andere Tipps

Gehen auf einen Anker auf einer Seite - das ist, was # bedeutet -. Erfordert kein Neuladen

Wenn sie mir diese besondere Aufgabe bei der Arbeit geben würde ich es zu entwerfen, lehnen Sie sich zurück. Wenn wir nicht über eine sichere Seite sprechen, oder ein OpenID Login, sollten Sie keine Anmelden oder Registrieren Sie in Form auftauchen. Benutzer müssen für diesen https aussehen lernen. An der Spitze ihrer Seite, und nie melden Sie sich an, wenn sie es nicht sehen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top