AJAX提交到Handler.ashx一般处理程序返回json数据 (字符串拼接方式)

 1 <%@ WebHandler Language="C#" Class="Handler" %>
 2 
 3 using System;
 4 using System.Web;
 5 using System.Text;
 6 
 7 public class Handler : IHttpHandler {
 8     
 9     public void ProcessRequest (HttpContext context) {
10         context.Response.ContentType = "text/plain";
11         string id = "0";
12         //判断提交方式
13         if (context.Request.RequestType.ToLower() == "get")
14         {
15             id = context.Request.QueryString["id"];
16         }
17         else
18         {
19             id = context.Request.Form["id"];
20         }
21         
22         string name = @"jinho's good \"" you";
23         /**
24          * 今天暂时用手动创建个json字符串类型,其实.net中有
25          * System.Runtime.Serialization.Json.DataContractJsonSerializer这个类来把
26          * 实体对象转换为json字符串! 改天再用那种方式写个吧!
27          * 自己也学习学习[更多关于json介绍!google一下多了是]
28          * */
29         StringBuilder sb = new StringBuilder("{");
30         sb.Append("id:"+id);
31         /*
32          * 注意但属性值为字符串的时候需要有'号或者"号['字符串']
33          * 当 参数 name 又含 有单引号或者双引号 就会出错了![截断了字符串]
34          * 在这里sb.Append(",name:'escape(" + name + ")'"); 用js的escape也不行
35          * context.Server.HtmlEncode();,context.Server.UrlEncode();也不行
36          * 可以看看这里
37          * escape("'") = %27 可以在js用 unescape("'") 就还原了
38          * escape(""") = %22 嘿嘿,用这个方法也是我的无奈之举!
39          * 谁有好的方法记得告诉我哦! 先谢谢了!
40          * 问题已解决:http://www.cnblogs.com/jinho/archive/2010/05/07/1729586.html
41          * */
42         sb.Append(",name:'" + name.Replace("'", "%27").Replace("\"", "%22") + "'"); 
43         sb.Append(",age:22");
44         sb.Append("}");
45         //输出 json 字符串
46         context.Response.Write(sb.ToString());
47         context.Response.End();
48     }
49  
50     public bool IsReusable {
51         get {
52             return false;
53         }
54     }
55 
56 }

 

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>前台</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:scriptmanager runat="server" ID="sm" />
    <script type="text/javascript">
        function ajaxFunction() {
            var xmlHttp;
            try {
                // Firefox, Opera 8.0+, Safari
                xmlHttp = new XMLHttpRequest();
            }
            catch (e) {

                // Internet Explorer
                try {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e) {

                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e) {
                        alert("您的浏览器不支持AJAX!");
                        return false;
                    }
                }
            }
            return xmlHttp;
        }
</script>
    <script type="text/javascript">
        var xmlhttp = null;
        function loadJsonData() {
            xmlhttp = ajaxFunction();
            if (xmlhttp != null) {
                xmlhttp.onreadystatechange = state_Change;
                var data = "id=231";
                //把这两句注释,看看下面的POST提交方式
                xmlhttp.open("GET", "Handler.ashx?" + data, true);
                xmlhttp.send(null);
                /*
                xmlhttp.open("POST", "Handler.ashx", true);
                //如果使用POST提交 不设置这条语句,url页面 Request.Form["key"] 是取不到值的!
                //这句我也不知道为什么要设置,网上找到的![GET提交可以不设置,但需要把参数拼接到URL]
                xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlhttp.send(data); //如果是post提交,需要把数据发送过去
                */
            }
            else {
                alert("Your browser does not support XMLHTTP.");
            }
        }
        function state_Change() {
            if (xmlhttp.readyState == 4) {// 4 = "loaded"
                if (xmlhttp.status == 200) {// 200 = "OK"
                    eval("var s = " + xmlhttp.responseText);
                    $get("divDisplay").innerHTML = "ID" + s.id + "Name:" + unescape(s.name) + "Age:" + s.age;
                }
                else {
                    alert("Error:" + xmlhttp.statusText);
                }
            }
        }
</script>

    <div>
    <input type="button" value="GetJson" οnclick="loadJsonData();" />
    <div id="divDisplay"></div>
    </div>
    </form>
</body>
</html>

 

posted on 2014-03-22 14:53  我的耐特人生 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/mynetwork/p/3617604.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值