JavaScript重定向无法正常工作,只有在调试器打开时才能在Chrome中使用

时间:2013-06-23 02:11:20

标签: javascript jquery

以下javascript代码重定向“成功”有什么问题?

$('#recordUser').click(function () {
 $.ajax({
    type: 'POST',
    url: 'api/RecordUser',
    data: $("#recordUserForm").serialize(),
    dataType: 'json',
    success: function (userEmail) {
        var newUrl = "/Home/AnotherPage?email=" + userEmail.Email;
        $(location).attr('href', newUrl);
        //I have also tried following ways to redirect:
        //window.location.href = "/Home/AnotherPage?email=" + userEmail.Email;
        //window.location = "/Home/AnotherPage?email=" + userEmail.Email;
        //window.location.replace(newUrl);
    },
    error: function (xhr, status, err) {
        console.log(xhr);            
    }
 });
});
//#recordUser is a button inside a form with method="post"
表单的

Html

       <form id="recordUserForm" accept-charset="UTF-8" method="post">
        <div class="...">
         <input id="recordUserEmail" class="span6" name="Email" type="text">
        </div>
        <button class="..." id="recordUser">Submit</button>
       </form>

我在Chrome和Firefox中对此进行了测试,并且两者都没有重定向。我已经确定我的服务器代码工作正常。

在Chrome中,如果我在调试模式下运行javascript,则会使用任何重定向命令重定向该页面,但如果我关闭调试器,则重定向命令将停止工作。

如果我从html表单中删除“method”属性,则会显示url中的查询字符串,但该页面仍保留在同一位置。例如,如果我在localhost:80然后提交表单,那么url将更改为localhost:80?email = email而不是预期的newUrl。奇怪的是,如果我在调试中运行它,那么它按预期工作。为什么呢?

如果有人能够指出错误以及上述代码仅在Chrome调试模式下工作的原因,那么会感激/高兴吗?我还想了解如何在“错误”回调中打印出有用的错误消息?有用的我指的是一些指向错误源的东西(例如异常消息,堆栈跟踪等),而不是我必须手动插入的东西。

更新1

如果我将html for button更改为

        <input class="..." id="recordUser" value="Submit" type="button"/>

并在脚本中使用click方法然后它工作正常。

我仍然会感谢您的回答,告诉我如何使用button以及脚本在Chrome调试模式下工作的原因?

更新2

在发布Update1时,我意识到我错过了type的html中的button。也许,我认为因为它被标记为button然后指定类型将是多余的,但事实并非如此。

 <button type="button" class="..." id="recordUser">Submit</button>

上面使用原始javascript的标记现在可以正常工作了。所以,我想唯一的问题是为什么它在Chrome调试模式下工作呢?

1 个答案:

答案 0 :(得分:0)

如果window.location = "something"失败,那是因为以下两种可能之一:

  1. 代码没有被执行,因为你的ajax查询没有成功(你的后端可能有些问题,在成功函数开始时使用console.log来检测它是否被执行)。
  2. “something”与目前浏览器导航栏中的网址完全相同,因此它实际上正在运行。
  3. 不要使用它们,因为它们完全错误(其他两种方法都是正确的):

    • $(location).attr('href',newUrl);
    • window.location.replace(NEWURL);

    重定向的正确方法是这些(或者可以使用crossbrowser):

    • window.location =“something”;
    • window.location.href =“something”;