Neuladen einer Seite über AJAX, wenn window.location = self.location nicht funktioniert
-
05-07-2019 - |
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 ??
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