以下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调试模式下工作呢?
答案 0 :(得分:0)
如果window.location = "something"
失败,那是因为以下两种可能之一:
不要使用它们,因为它们完全错误(其他两种方法都是正确的):
重定向的正确方法是这些(或者可以使用crossbrowser):