现在的位置: 首页 > 综合 > 正文

jquery+ajax 的 data参数设置的内容,如何在HttpHandler的HttpContext中取得(包括post方式和get方式)

2012年02月05日 ⁄ 综合 ⁄ 共 2156字 ⁄ 字号 评论关闭

2012年2月28日 于新城科技园

jquery+ajax 的 data参数设置的内容,如何在HttpHandler的HttpContext中取得(包括post方式和get方式)

比如 :

注意:要引用两个jquery的包,一个是jquery-1.6.2.js 和 jquery.json.js 都直接在 网上下载就可以了。

<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <script src="./js/jquery-1.6.2.js"></script>    
    <script src="./js/jquery.json.js"></script>
    
    <title>JSON数据的取得</title>
    <script>     
   
    $(function(){
        $.ajax ({
            // 下面的各个参数的设置,用法,请参照 http://api.jquery.com/jQuery.ajax/ 
            // 当然还有其他的很多参数了,具体用法不一一列举了。
            url : "MyJsonHandler/student.json",            // JSON数据的地址
            type: 'get',                                  // 数据传送方式              
            dataType: 'json',                              // 数据类型
            data: $.toJSON({"school" :encodeURIComponent("南京大学")}),        // 如果取得json数据之前,需要传递参数的话,可以使用data,个人理解:data就相当于一个parameter。
            contentType: 'application/json',
            // 返回结果为成功
            success : function( data, textStatus,jqXHR ) {
                $("#showarea").html(data.school);
            },
            // 返回结果为失败
            error : function(jqXHR, textStatus, errorThrown) {
                alert('error');    
            }
        });    
    });  
    </script>  
</head>  
  
<body>  
    <section id="showarea"> 
    </section>
</body>  
</html>  


对于get方式,或许大家早就已经有了答案,那就是从 HttpContext的 Request.QueryString中取得。

但是,如果数据传递方式是 post 呢? 这样从Request.QueryString中  是肯定取不到数据的。怎么办?

我写了一个比较通用的方法,兼容post 和 get 。

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.IO;

namespace MyHandlers
{
    public class MyJsonHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            // Post方式下,取得client端传过来的数据
            if ("post".Equals(context.Request.HttpMethod.ToLower()))
            {
                StreamReader reader = new StreamReader(context.Request.InputStream);
                string json = HttpUtility.UrlDecode(reader.ReadToEnd());
                context.Response.Write(json);
            }
            // Get方式下,取得client端传过来的数据
            else
            {
                // 注意,这个是需要解码的
                string json = HttpUtility.UrlDecode(context.Request.QueryString.ToString());
                context.Response.Write(json);
            }
        }
    }
}

1, 上面的代码并不是一个完整的一套httphandler, 还有web.config之类的东西,都省略掉了。

上面的代码只是一个示例,告诉你怎么去做。

2, 如果项目中,只需要post方式的话,就不要那么复杂了。 data里面的内容就不需要编码和解码这么麻烦了。这一点注意一下。

最后得到的结果: (post 和 get一样)

抱歉!评论已关闭.