2012-04-03 30 views
3

私はサーバーへのajax呼び出しを行いたいと思います。私は、このページのHTMLを必要とするaspxページからjson形式でプレーンhtmlの代わりに応答を取得

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

      } 
     }); 

:私は次のようにリモートからこのページを呼び出しています

<form> 
<div>foo</div> 
</form> 

: Foo.aspxのHTML:私は、ページのHTMLを取得する必要がfoo.aspxを言いますしかし、私の要件は、このページからの応答はJSON形式でなければならないということです。すなわち、

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

}} 

foo.aspxコードの背後にある他のプロパティも設定する必要があるため、jsonプロパティとしてhtmlが必要ですか? 普通のhtmlではなくjson形式でaspxページからの応答を取得するにはどうすればよいですか? リモートページのHTML +他のプロパティもサーバーからjson形式で取得する他の方法は何ですか?私はHTTPHandlersのために行く必要がありますか?はいの場合、そのHTTPHandlerでfoo.aspxのhtmlを取得するにはどうすればよいですか?

+0

どこが問題なのですか?あなたはちょうど言ったことをやってみましたか?それは魅力のように動作するはずです –

+1

あなたは[WebMethod]を利用することができます... http://stackoverflow.com/questions/348689/jquery-ajax-with-asp-net-webmethod-returning-entire-ページ – Flowerking

+0

その方法でfoo.aspxページのHTMLを取得するにはどうすればよいですか? –

答えて

2

あなたはあなたのページの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)の間に出力をバッファするほうが良いでしょう。

0

HTMLが必要な場合は、データ型をhtmlに変更します。成功イベントは、応答としてhtmlを返します。以下のような

何か:

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

は、基本的にはあなたのJSONのevenlopeにFoo.aspx出力をラップHTTPHandlerのを作成する必要があります。それがあると、JS呼び出しは/foo.aspxの代わりに '/MyWebHandler?page=foo.aspx'をurlにすることになります。ハンドラ内では、ページを照会してその出力をダンプするだけです。

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(); 
      } 
関連する問題