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" onclick="loadJsonData();" /> <div id="divDisplay"></div> </div> </form> </body> </html>