【发布时间】:2023-04-09 17:25:01
【问题描述】:
我正在尝试使用以下代码登录用户:
$("form").submit(function(event)
{
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize(),
complete: function(XMLHttpRequest, textStatus)
{
if (XMLHttpRequest.status === 302)
{
// if they've successfully logged in, I redirect to their page
window.location = XMLHttpRequest.getResponseHeader("Location");
}
}
});
return false;
});
在服务器上使用以下代码来处理帖子:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(MyUser user)
{
if (ValidateLogOn(user.UserName, user.Password))
{
if (Request.QueryString["ReturnUrl"] != null)
{
return Redirect(Request.QueryString["ReturnUrl"]);
}
else
{
return RedirectToRoute("Default");
}
}
}
我认为两个“重定向”操作结果都应该发出 302,但 XMLHttpRequest.status 值始终为 200。我做错了什么吗?
编辑:这最终奏效了
$("form").submit(function(event)
{
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize(),
complete: function(xhr, textStatus)
{
var dataType = xhr.getResponseHeader("Content-Type");
if (dataType.indexOf("json") > -1)
{
window.location = JSON.parse(xhr.responseText).returnUrl;
}
if (dataType.indexOf("html") > -1)
{
$('#main').html(xhr.responseText);
}
}
});
return false;
});
在服务器上有以下内容:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(MyUser user, string returnUrl)
{
if (!ValidateLogOn(user.UserName, user.Password))
{
return PartialView();
}
else
{
user = (MyUser)Session["CurrentUser"];
if (user.IsPublic)
{
return Json(new { returnUrl = Url.RouteUrl("PublicRoute") });
}
else
{
if (!string.IsNullOrEmpty(returnUrl))
{
return Json(new { returnUrl = returnUrl.ToLower() });
}
else
{
return Json(new { returnUrl = Url.RouteUrl("AdminRoute") });
}
}
}
}
谢谢
戴夫
【问题讨论】:
标签: jquery asp.net-mvc redirect