javascript - 使用 JSON 重定向到 WebForm

标签 javascript jquery asp.net ajax json

我遇到一种情况,我不想使用查询字符串将数据传递到重定向页面。

当前实现,源页面:

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/

相关文章:

javascript - 如何在客户端中接收换行符分隔的 JSON?

javascript - 我想做一个内存游戏。创建卡片的最佳方式是什么

javascript - 通过类名在 Jquery 选择器中选择元素并将其转换回 Jquery 对象

除非光标重新进入元素,否则不会检测到带有 live() 的 JQuery 鼠标悬停

javascript - 随着时间的推移增加字体大小

.net - 需要通过webservice在ASP.Net中生成图片

javascript - "new"如何与 javascript 中的类一起使用?

javascript - 有没有更简单的方法用纯js获取formData?

c# - 在 asp.net web 应用程序的 Gridview 中使用 shift + 滚动的水平滚动?

c# - asp.net core项目发布后iis立即关闭