日期:2014-05-16  浏览次数:20383 次

JQuery库Ajax返回Json对象如果过滤关键字符???
今天碰到一个非常诡异的问题,一直到下午下班都没有解决,花了半天时间。。

需求是是一个前端的一个tab控件,没点击一个页签,ajax动态获取数据,每个页签都有分页,自己动态输出的。。

如:
全部   部门一   部门二   部门三   部门四………………

今天上午突然出现一个奇怪的问题,就是点击全部的时候,怎么也显示不了数据,后面基本都可以显示出来。。。


一直到晚上,问题大概断定为用户可能输入了英文的转义符号"\",回来尝了把,果然,

    protected void Page_Load(object sender, EventArgs e)
    {
        string userName = string.IsNullOrEmpty(Request.QueryString["userName"]) ? "" : Request.QueryString["userName"].ToString();
        int age = string.IsNullOrEmpty(Request.QueryString["age"]) ? 0 : Convert.ToInt32(Request.QueryString["age"]);
        string address = "s;'d\\\\\\\"fs;dfk";

        StringBuilder sb = new StringBuilder();
        sb.Append("{");
        sb.AppendFormat("\"userName\":\"{0}\",\"age\":\"{1}\",\"address\":\"{2}\"", userName, age, address);
        sb.Append("}");

        Response.Write(sb.ToString());
    }



<script type="text/javascript">
    $(function () {
        $.ajax({
            type: "GET",
            url: "Ajax/Demo.aspx",
            data: "userName=qingyun",
            success: function (data) {
                alert("userName=" + data.userName);
                alert("age=" + data.age);
                alert("address=" + decodeURIComponent(data.address));
            },
            error: function (red) {
                alert("error");
            },
            dataType: "json"
        });
    });
</script>


其中需要注意的是:

        sb.Append("{");
        sb.AppendFormat("\"userName\":\"{0}\",\"age\":\"{1}\",\"address\":\"{2}\"", userName, age, address);
        sb.Append("}");


我想知道,如果用户数据里面包括了很多英文的转义符号"\",我该怎么“友好”的显示出来???
------解决方案--------------------
json格式要求之严,又岂是一个\号呀。 手写json是极不明智的, 效率低,而且容易出错。 如果有一个工具给你, 只要你把 List, DataTable 或者对象传过去, 就可以返回一个