JOJ
踏踏实实做人,认认真真做事!放纵自己就是毁灭自己!

我之前有几篇笔记是关于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数据

 

 

Technorati 标签: ajax,asp.net

posted on 2010-05-07 12:19  JoinJ  阅读(2150)  评论(0编辑  收藏  举报