2011-09-29 85 views
0

我有一個用戶輸入用戶名和密碼的登錄表單。當他們點擊一個圖像按鈕來提交我做一個Ajax調用來驗證用戶。該響應返回目標網址。現在,當我嘗試做一個「window.location.href = url」的過程不適用於FireFox 7(FF),但它可以在其他瀏覽器IE,Chrome ...等工作window.location.href和JQuery不在FF 7中工作

這是我的jquery ajax調用。

var loginSubmit = function() { 

    if ($('#loginForm').data('isSubmitting')) return false; 

     showProgress('Logging in..'); 
     $('#loginErrors').empty(); 
     $('#login-form').fadeTo(100, 0.4); 
     $.ajax({ 
      cache: false, 
      url: '/dispatcher/user/login', 
      data: { 
       'user': $('#userName').val(), 
       'pwd': $('#password').val(), 
       'continuePath': $('#continuePath').length > 0 ? $('#continuePath').val() : '/my-account' 
      }, 
      type: 'POST', 
      success: function (data) { 
      $('#loginForm').data('isSubmitting', true); 

      console.log("Data from Controller: " + data.dest); 

      if (data.dest) { 
       var href = data.dest; 
       window.location.href = href; 
       return false; 
      } else { 
       console.log("DATA DEST FALSE"); 
       $('#loginForm').data('isSubmitting', false); 
       $('#login-form').fadeTo(100, 1); 
       showError('Invalid username/password'); 
      } 
      } 
     }); 
     return false; 
    }; 
    $('#loginForm').submit(loginSubmit); 

這是我的表格。

<form id="loginForm" action="#"> 
     <c:if test="${sessionScope['continuePath'] != null}"> 
      <input type="hidden" name="continuePath" value="${sessionScope['continuePath']}"/> 
     </c:if> 
     <div id="progressMessage" style="color: #333; font-weight: bold;"></div> 
     <div id="loginErrors" style="color: red; font-weight: bold"></div> 
     <div id="login-form"> 
      <dl> 
       <dt><label for="userName">Email Address:</label></dt> 
       <dd><input name="user" id="userName" type="text" size="30" maxlength="80"/></dd> 
       <dt><label for="password">Password:</label></dt> 
       <dd><input name="pwd" id="password" type="password" /></dd> 
      </dl> 
      <div class="login_button"> 
       <input type="image" src="/assets/images/user/btn-log-in.gif" alt="Login"/> 
       <br/><br/> 
       <a href="javascript:openPopup('forgotPassword');" class="default">Forgot your password?</a> 
       <!-- 
       <a href="#" rel="#forgotPasswordDialog" class="default">Forgot your password?</a> 
       --> 
      </div> 
     </div> 
    </form> 

爲什麼這種行爲在Firefox 7有什麼不同?有人可以提出一個可以在所有瀏覽器中工作的解決方案嗎?你能感覺到我的沮喪嗎?

+0

是否只用'location.href =網址工作;'? –

+0

如果在作用域鏈上存在某個中間變量對象的* window *屬性和no * location *屬性,那麼這隻會有所作爲。這是偶然的機會,所以我猜想值得一試。 * window.location *和* location *都可以預期通常解析爲相同的對象,即[window.location](http://www.w3.org/TR/html5/history.html#the-location - 接口)對象,在大多數情況下。當然不能保證,這就是爲什麼許多腳本保持對全局對象的獨立引用,這可以用來保證訪問預期的對象。 – RobG

+0

我試過window.location,位置和window.location.href在FF7上沒有成功,所有其他工作正常。 – Byron

回答

1

什麼:基於評論

window.location = url; //no .href 

編輯。

由於您的網址與您的網站根目錄相關,因此要使用的window.location對象的「最正確」部分將是路徑名,因爲它描述了相對於主機的路徑。

window.location.pathname = "/my/relative/path/page.html"; 

然而,任何變化對window.location對象應當觸發window.location.assign()方法和加載新頁。如果在修改對象屬性時沒有觸發該事件,則可以嘗試直接調用它。

window.location.assign(href); 

最後,我通過控制檯檢查,無法用FF7重現這種行爲。 window.location使用相對路徑和完整的URL。

進一步參考:https://developer.mozilla.org/en/window.location

+0

我改變它爲「window.location = url」,這也沒有工作。 data.dest中返回的路徑是相對的,並轉到「/ my-account」不知道這是否有所作爲。 – Byron

+0

window.location.assign(href)完成了這項工作。謝謝。 – Byron

相關問題