我有一个登录表单,用户可以从中输入用户名和密码。当他们点击图像按钮提交时,我会进行ajax调用以验证用户。响应返回目标URL。现在,当我尝试执行“window.location.href = url”时,该过程在FireFox 7(FF)中无效,但它可以在其他浏览器IE,Chrome等上运行
这是我的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 :(得分: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使用相对路径和完整网址。