0

以下 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 表单中删除“方法”属性,则 url 中的查询字符串确实会出现,但页面仍位于同一位置。例如,如果我在 localhost:80 然后提交表单,则 url 更改为 localhost:80?email=email 而不是预期的 newUrl。奇怪的是,如果我在调试中运行它,那么它会按预期工作。为什么?

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

更新 1

如果我将按钮的 html 更改为

        <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 调试模式下工作呢?

4

1 回答 1

0

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

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

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

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

重定向的正确方法是这些(都可以跨浏览器工作):

  • window.location = "某事";
  • window.location.href = "某事";
于 2013-06-23T02:58:40.253 回答