window.location.href和JQuery在FF 7中不起作用

时间:2011-09-29 23:01:16

标签: javascript jquery

我有一个登录表单,用户可以从中输入用户名和密码。当他们点击图像按钮提交时,我会进行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中的这种行为有所不同?有人可以建议一个可以在所有浏览器中使用的解决方案吗?你能感觉到我的沮丧吗?

1 个答案:

答案 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使用相对路径和完整网址。

进一步参考:https://developer.mozilla.org/en/window.location