最近做項目時發現,先彈出提示框,再跳轉頁面
這樣寫:Jscript.Alert("你好,Hello!");
Response.Redirect("/index.aspx");
只是頁面跳轉了,與這樣寫Response.Redirect("/index.aspx");沒什么區別
所以我就用location.href
這樣寫:Response.Write("<script>alert('你好,Hello!');location.href='/index.aspx';</script>");
就能得到我想的先彈出提示框,再跳轉頁面,接下來就說一說這兩者的區別:
response.redirect是請求轉向,location.href 是瀏覽器轉向.
Response.Redirect方法導致瀏覽器鏈接到一個指定的URL。
當Response.Redirect()方法被調用時,它會創建一個應答, 應答頭中指出了狀態代碼302(表示目標已經改變)以及新的目標URL。 瀏覽器從服務器收到該應答,利用應答頭中的信息發出一個對新URL的請求。 這就是說,使用Response.Redirect方法時重定向操作發生在客戶端,總共涉及到兩次與服務器的通信(兩個來回): 第一次是對原始頁面的請求,得到一個302應答, 第二次是請求302應答中聲明的新頁面,得到重定向之后的頁面。
如果你請求含有response.redirect的頁面時,在服務器端已經給你轉向了,服務器遇到該語句時直接轉向目的頁面. 而location.href一般是瀏覽器遇到該語句時,重新向另一個地址進行請求,可見,response.redirect只是一次請求,而客戶端使用location轉向時要兩次向服務器進行請求. 因為服務器端是不存在window等瀏覽器窗口的,所以location絕對不會是服務端代碼,只能在客戶端輸出.
事實上,如果在客戶端中,js語句中同樣也存在redirect語句,這時兩者的作用一樣. 但機理不同,redirect只是一個轉向語句,遇到該語句時,直接轉向,客戶端是兩次請求的. 而location相當於你在地址欄中輸入了地址后按回車! 如果對轉向沒有控制的話,兩者在客戶端是一樣的. 但response.redirect往往用於服務端,而location只能用在客戶端!
也就是說location.href是在客戶端提出的重定向,response.redirect是在服務器端提出的重定向。window.location.href 語句可以實現一個框架的頁面在執行服務器端代碼后刷新另一個框架的頁面
