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