2015-11-05 32 views
2

從非常好的示例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頁面重新加載等事件後排隊

我錯過了什麼?我是否錯誤地使用了延期對象?

非常感謝您的幫助。

回答

1

如果您的"#submit"元素實際上正在提交表單(例如,它是form中的「提交」類型的輸入),則可能會取消頁面重定向。例如。當在表單上沒有指定action時,它只是重新加載相同的頁面,從而阻止您修改window.location.href而不產生任何效果。

又見一篇:javascript redirect not working anyway

你有3個簡單可行的解決方案:

  • 打開你的元素/按鈕,進入一個正常的(而不是提交)。
  • 防止元素/按鈕提交表單(function (event) { event.preventDefault(); /* rest of your code */})。
  • 將表單提交事件附加主回調。用戶然後可以通過點擊「Enter」來觸發該操作,而不僅僅是通過點擊提交按鈕。
+0

你是完全正確的@ghybs!我沒有足夠的關注html表單(源代碼未包含在我的文章中)。我已經離開了 ''input type =「submit」id =「submit」value =「Login」/>' 這會導致click事件偶爾由表單反應,而不是由jQuery函數響應。一旦我將我的html代碼更改爲 '' 一切開始按預期工作。謝謝! – rgulia

+0

不客氣,我很高興你能使它工作! – ghybs

相關問題