從非常好的示例post by Felix Kling詳細闡述我編寫了一些jQuery代碼來驗證用戶。如果認證成功,則應將window.location對象分配/替換爲新的URL。jQuery中的頁面重定向失敗。比賽狀況?
重定向偶爾會失敗,即使用戶是正確驗證:基於對的sessionStorage(「驗證」)菜單的身份驗證的用戶看起來是由其他一些JS代碼修改的值,所以我知道當憑據輸入正確時。
這是我的代碼。
$(document).ready(function() {
\t $('#submit').click(function() {
\t \t var webServiceHref = window.location.href;
\t \t var webServicePath = webServiceHref.slice(0,webServiceHref.lastIndexOf("/"));
\t \t var serviceUrl = webServicePath + "/login.php";
\t \t $.post(serviceUrl,
\t \t {
\t \t \t Email: $("#Email").val(),
\t \t \t Password: $("#Password").val()
\t \t }).done(function(data, status) {
\t \t \t var json = JSON.parse(data);
\t \t \t if (json.valid == true){
\t \t \t \t sessionStorage.setItem('Auth', true);
\t \t \t \t sessionStorage.setItem('FirstName', json.FirstName); \t
\t \t \t \t sessionStorage.setItem('Email', json.Email);
\t \t \t \t $("#messageLine").val("Authentication succeded"); \t \t \t \t
\t \t \t \t $(location).attr('href', webServicePath + "/welcome.html");
// \t \t \t \t window.location.href = webServicePath + "/welcome.html"; \t
\t \t \t } else {
\t \t \t \t sessionStorage.clear();
\t \t \t \t $("#messageLine").val("Incorrect Username or Password");
\t \t \t }
\t \t });
\t }); \t // click
}); \t // ready
此行爲不會不依賴從重定向的調用方式:
- 我留在我的代碼,註釋掉,一些JS和jQuery 的方法的組合(window.location.assign,window.location.replace等)numerous posts on SO.
- 我甚至試過.reload()沒有成功。
在Chrome檢查器中,我甚至可以看到正在執行的回調語句,即正在創建的新URL的分配,但是當函數返回窗口對象時有時不會更改,有時候......它確實如此。
可能網址的分配是導致原的login.html頁面重新加載等事件後排隊?
我錯過了什麼?我是否錯誤地使用了延期對象?
非常感謝您的幫助。
你是完全正確的@ghybs!我沒有足夠的關注html表單(源代碼未包含在我的文章中)。我已經離開了 ''input type =「submit」id =「submit」value =「Login」/>' 這會導致click事件偶爾由表單反應,而不是由jQuery函數響應。一旦我將我的html代碼更改爲 '' 一切開始按預期工作。謝謝! – rgulia
不客氣,我很高興你能使它工作! – ghybs