我遇到一种情况,我不想使用查询字符串将数据传递到重定向页面。
当前实现,源页面:
window.location = "invaliduser.aspx?u=" + encodeURI(username);
我正在考虑使用 AJAX 方法,但不确定它是否会重定向到页面。
登陆页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="invaliduser.aspx.cs" Inherits="iTask.Organizer.invaliduser" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Invalid User</title>
<script type="text/javascript" src="Scripts/jquery-2.1.0.js"></script>
<script src="Scripts/app.utility.js"></script>
<script src="Scripts/InvalidUser.js"></script>
</head>
<body>
<h1>Invalid User Account:</h1>
<p>Your user account ( <span id="pUserName"></span> ) is not properly setup for this application.</p>
<p>Please contact the <a href="mailto:email@domain.com">Email recipient</a> for further assistance.</p>
</body>
</html>
当前的 JQuery:
jQuery(function ($) {
$(document).ready(function () {
var username = decodeURI(getUrlVars().u);
$("#pUserName").text(username);
});
});
打算使用 AJAX POST 方法将 JSON 数据传递到页面,但不确定它是否会坚持往返,因为我需要将数据传递到页面(不使用 QueryString),理想情况下全部都在同一个中请求,以便重定向与 JSON 数据打包在一起。
理论 AJAX/JSON 帖子:
PostJsonUTF8(
'invaliduser.aspx',
{ data: username },
function (resp) {
window.location = "invaliduser.aspx";
}
);
function PostJsonUTF8(url, data, success) {
PostAPI('json', 'application/json;charset=utf-8', url, data, success);
}
function PostAPI(type, contentType, url, data, success) {
if (typeof (success) === 'function') {
$.ajax({
type: "POST",
contentType: contentType,
dataType: type,
url: url,
data: data,
success: success,
error: AjaxFail
});
}
}
最佳答案
您是对的,您无法使用 AJAX 进行正常的重定向(301/302 状态代码)。我通常做的是在 AJAX 响应处理逻辑中设置以下内容:
function tryHandleResponseRedirect(resp, data) {
if (resp.status == 200 && data && data.redirect) {
// force a hard re-direct
window.location.href = data.redirect;
return true;
}
}
您可以使用 jQuery 的 ajaxSuccess
函数来处理连接:
$( document ).ajaxSuccess(function( event, xhr, settings, data ) {
tryHandleResponseRedirect(xhr, data);
});
然后我在服务器端执行类似以下操作,可以处理所有传出的 HTTP 响应:
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
var req = filterContext.HttpContext.Request;
var resp = filterContext.HttpContext.Response;
var shouldProcess = (resp.IsRequestBeingRedirected && req.IsAjaxRequest());
if (!shouldProcess)
{
base.OnResultExecuted(filterContext);
return;
}
var location = resp.RedirectLocation ?? resp.Headers["location"];
var json = JsonConvert.SerializeObject(new { redirect = location });
resp.ClearContent();
resp.Headers.Remove("location");
// send back a JSON object indicating a redirect
resp.StatusCode = 200;
resp.Write(json);
}
关于javascript - 使用 JSON 重定向到 WebForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24452097/