簡體   English   中英

從json格式的aspx頁面獲取響應,而不是普通的html

[英]get response from aspx page in json format instead of plain html

我想對服務器進行ajax調用。 我需要獲取頁面的html說foo.aspx: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格式而不是普通的html從aspx頁面獲得響應? 從服務器獲取json格式的遠程頁面+其他屬性的HTML的另一種方法是什么? 我應該去HTTPHandlers嗎? 如果是,我如何在HTTPHandler中獲取foo.aspx的html?

您可能想嘗試覆蓋頁面的render方法:

    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();
    }

很抱歉任何語法錯誤,以及回車的基本處理。 我想在page_load期間緩沖輸出會更好(Response.BufferOutput = true)

我改變了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();
            }

如果需要HTML,請將數據類型更改為html。 然后,成功事件將返回html作為響應。

就像是:

$.ajax({
     url: '/foo.aspx',
     dataType: 'html',
     success: function (data, textStatus, jqXHR) {
            alert(data); //data is html. 
     }
 });​

基本上你必須創建一個HTTPHandler,它將Foo.aspx輸出包裝到你的JSON evenlope中。 如上所述,JS調用將是url'/ MyWebHandler?page=foo.aspx',而不僅僅是/foo.aspx。 在處理程序中,您只需查詢頁面並轉儲其輸出即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM