我之前有几篇笔记是关于ajax请求后,返回的数据有特殊字符后阶段字符报错的问题! 如返回内容有 单引号,双引号etc! 他们会截取字符串,致使json格式不正确而报错! 而之前我一直用的是很瓦塔的方法:name.Replace("'", "%27").Replace("\"", "%22")! 今天我将更在这种做法!
核心代码: string json = "{Id:1,Name:\"" + Microsoft.JScript.GlobalObject.escape(name) + "\",Sex:\"male\"}";
Microsoft.JScript.GlobalObject:这里类里面有许多和前台js对应的方法! 如:decodeURI,encodeURIComponent etc !感兴趣的自己看看
1.首先项目引用Microsoft.JScript类库!
2.后台使用:Microsoft.JScript.GlobalObject.escape(name)
3.前台使用:unescape(s.Name);
page:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <script type="text/javascript"> function GetJson() { 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; } } } xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { //alert(xmlHttp.responseText); var str = xmlHttp.responseText; alert(str); //$get("divShow").innerHTML = xmlHttp.responseText; //eval('var s = {"id":1}'); //eval("var s = "+xmlHttp.responseText+")"; // s = { "id": 1 }; try { eval("var s = " + str); alert("sex:" + unescape(s.Sex) + "\r\nname:" + unescape(s.Name)); } catch (e) { alert(e.message) } } } var data = "id=1"; xmlHttp.open("POST", "default.aspx?ajax=true", true); xmlHttp.send(data); } </script> <center> <div style="color:Red"> Test <input type="button" value="GetJson" onclick="GetJson();" /> <div id="divShow"></div> </div></center> </form> </body> </html>
using Microsoft.SharePoint; using System.Diagnostics; using System.Data; //注意项目需要添加引用:Microsoft.JScript类库 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; if (!string.IsNullOrEmpty(Request.QueryString["ajax"])) { string name = "hao'jiang\"fesd"; string sex = "sex'you\"lok"; //1.string json = "{Id:1,Name:\"" + Server.UrlEncode(name) + "\",Sex:\"male\"}"; string json = "{Id:1,Name:\"" + Microsoft.JScript.GlobalObject.escape(name) + "\",Sex:\"" + Microsoft.JScript.GlobalObject.escape(sex) + "\"}"; /** * 抱歉,由于之前我没有解决这个问题,一直用的很不是办法的办法:string json = "{Id:1,Name:\"" + name.Replace("'", "%27").Replace("\"", "%22") + "\",Sex:\"male\"}"; * 但是使用这种方法,我心里一直有阴影[哈哈!],我总是千方百计的去google找答案!终于黄天不负有心人!被我找到了!我认为该方法较好! * * */ Response.Write(json); /* * 注意:如果你ajax提交的页面为 aspx,那么你在Response.Write("")之后还需要 * Response.End();不然你把你需要的字符打印出来了,接着还会把页面的HTML打印出 * 来,以前我不知道,没有执行Response.End(),xmlhttprequest.responseText取出来 * 还需要截取字符才对啊! * 所以每次记得 调用Response.End();感兴趣的话,把Response.End();注释掉试一试! * */ Response.End(); } }
}
下面这篇也有这个问题我之前没有解决!
AJAX提交到Handler.ashx一般处理程序返回json数据
记录学习点滴...,坚持每天让自己的技能增加1%,默默的坚持下去吧!:-)