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

以下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

  

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

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

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

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

更新1

如果我将html for button更改为

   

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

我仍然会感谢一个答案,告诉我如何使用button以及为什么脚本在Chrome调试模式下工作?

更新2

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

   

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

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

  1. 代码没有被执行,因为你的ajax查询没有成功(你的后端可能有些问题,在成功函数开始时使用console.log来检测它是否被执行)。
  2. “something”与您当前浏览器导航栏中的url完全相同,因此它实际上正在运行。

不要使用这些因为它们完全错误(其他两种方法都是正确的):

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

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

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