以JSON格式从aspx页面获取响应,而不是纯HTML。

3
我希望能够向服务器发起一个 ajax 调用。我需要获取名为 foo.aspx 的页面的 HTML 代码: foo.aspx 的 HTML 代码:
<form>
<div>foo</div>
</form>

我正在从远程页面调用此页面,例如:

         $.ajax({
             url: '/foo.aspx',
             data: {},
             contentType: 'application/json; charset=utf-8',
             dataType: 'json',
             success: function (response) {

             }
         });

我需要这个页面的HTML,但我的要求是该页面的响应应该是JSON格式。

{"myresponse": {
  "id": "123",
  "html":<HTML of foo.aspx>,

}} 

我需要将HTML作为JSON属性,因为我还需要从foo.aspx代码后台设置其他属性。如何以JSON格式从aspx页面获取响应,而不是纯HTML?有什么其他方法可以从服务器以JSON格式获取远程页面的HTML和其他属性吗?我应该使用HTTP处理程序吗?如果是,我怎样才能在该HTTP处理程序中获取foo.aspx的HTML?


那么问题出在哪里呢?你试过刚才说的吗?它应该能够完美运行。 - Jibi Abraham
1
你可以利用 [WebMethod] 来实现这个功能...请查看 https://dev59.com/ZXRC5IYBdhLWcg3wSu97 - Flowerking
我该如何在这个方法中获取我的foo.aspx页面的HTML? - Rocky Singh
4个回答

2
您可以尝试覆盖页面的渲染方法:

    protected override void Render(HtmlTextWriter writer)
    {
        var sw = new System.IO.StringWriter();
        var tw = new HtmlTextWriter(sw);
        base.Render(tw);

        Response.Write(String.Format("{{\"myresponse\": {{  \"id": \"123",\"html\":\"{0}\"}}}}"
        , Server.HtmlEncode(sw.ToString()).Replace("\n"," "));
        Response.Flush();
        Response.End();
    }

对于任何语法错误和对回车符的基本处理,我感到抱歉。 我猜在页面加载期间缓冲输出会更好(Response.BufferOutput = true)


0
如果您需要HTML,则将数据类型更改为html。成功事件将返回响应的HTML。
类似于:
$.ajax({
     url: '/foo.aspx',
     dataType: 'html',
     success: function (data, textStatus, jqXHR) {
            alert(data); //data is html. 
     }
 });​

0

我稍微修改了jbl的重写Render方法的示例,这对我来说完美地解决了问题。我不需要HTML编码,只需要应用一些格式和包含内容类型即可。

            protected override void Render(HtmlTextWriter writer)
            {
                var sw = new System.IO.StringWriter();
                var tw = new HtmlTextWriter(sw);
                base.Render(tw);

                var html = sw.ToString();            
                html = html.Replace("\n", " ");
                html = html.Replace("\r", " ");
                html = html.Replace("\t", " ");
                var data = html.Replace("\"", "\\\"");
                data = data.Replace("/", "\\/");
                var json = String.Format("{{\"html\":\"{0}\"}}", data);

                Response.ContentType = "application/json";
                Response.Write(json);
                Response.Flush();
                Response.End();
            }

0
基本上,您需要创建一个HTTP处理程序,将Foo.aspx的输出包装到您的JSON信封中。也就是说,JS调用将是'/MyWebHandler?page=foo.aspx'而不仅仅是/foo.aspx的URL。在处理程序中,您所需要做的就是查询页面并转储其输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接