2008-10-08 63 views
9

在我的主頁我:這樣一旦他們點擊通過AJAX重新加載頁面的時候了window.location = self.location不起作用

<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> 

通過MooTools的,我的ID得到這些錨元素,一個華麗的div會在它們下面彈出,其中包含登錄或註冊表單(當然包括阻止事件傳播的方法) ,並填充AJAX調用的字段 - 這應該創建會話並重新加載頁面,以便用戶可以看到他現在已經登錄並且用戶級別控制出現等。

ajax調用由MooTools AJAX類和evalScripts選項設置爲true。在AJAX頁面返回的腳本代碼:

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

該系統完美的作品 - 現在我不知道爲什麼,如果我改變錨hrefhref="#"我的腳本就不管用了?

它與窗口有什麼關係?

當我點擊一個鏈接左右時,它是否改變了它的屬性,即使事件的傳播已經停止?

回答

20
window.location = self.location; 

該javascript正在執行

執行時,瀏覽器被告知用新值替換window.location的值。 並非所有的瀏覽器都會在這裏以相同的方式作出反應。有些可能會按照您的預期工作,但其他人會更加清楚並比較兩個值。 瀏覽器知道它在哪個頁面上,它知道你只是要求它進入同一頁面。

瀏覽器緩存

瀏覽器,甚至有當前頁面的副本緩存。它可以與服務器交談並詢問它在緩存中的頁面是否仍然有效。如果緩存有效,則可能決定不強制重新加載頁面。在幕後,這發生在HTTP頭部。瀏覽器和服務器可以通過HTTP以多種方式進行通信。在這種情況下,您的瀏覽器發送一個快速請求到服務器說法是這樣的:

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 

這就是所謂的有條件的GET請求。通過說If-Modified-Since,您的瀏覽器說:「給我那個文件,但只有在我上次看到它時修改過了。」

長話短說,你沒有明確告訴瀏覽器重新加載頁面。

下面是如何,您可以:

location.reload(true); 

的 「真」 是一個可選參數,爲強制重裝。瀏覽器甚至不會看緩存。它只會照你說的去做。

+0

哇一個JS大師,非常感謝這個我欠你一個甜甜圈和一些咖啡:) – lock 2008-10-13 03:38:31

1

轉到頁面上的定位點 - 這是#表示 - 不需要重新加載。

0

如果他們在工作中把這個特殊任務交給我,我會把它踢回去設計。除非我們談論的是安全頁面或OpenID登錄,否則不應該彈出登錄或登錄表單。用戶需要學習如何在他們頁面的頂部查找該https:並且如果他們沒有看到它,請不要登錄。

相關問題