关于js接收json并进行处理

最近工作中遇到的问题,内容是从数据库中读取值并赋给前台的几个textbox控件,由于公司使用的自定义控件,原本后台可以轻松实现的问题就只能用Ajax前台实现了,由于我对Ajax不是很熟练,所以记录下来并希望能对有同样问题的小伙伴起一些帮助。

        HttpRequest request;
        HttpResponse response;
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            this.request = context.Request;
            this.response = context.Response;
            string ID = this.request["ID"] ?? "";//接受前台js传的参数
            string josnString = string.Empty;
            string sql = string.Empty;
            DataTable dt = new DataTable();
            JsonRow jr = new JsonRow();//声明自定义的类
            if (!string.IsNullOrEmpty(ID))
            {
                sql = @"select * from MST_BCS_BUDGET where ID=@ID";//需要查询的sql语句
                dt = DataAccess.Instance("BizDB").ExecuteDataTable(sql, ID);//此处使用的自定义sqlhelper类,也可使用其他的,返回datatable类型
                if (dt != null && dt.Rows.Count > 0)
                {
                    jr.ITEMCODE = ConvertUtil.ToString(dt.Rows[0]["BUDGETSHEET"]);//对类里面每个字段进行赋值
                    jr.PSP = ConvertUtil.ToString(dt.Rows[0]["PSP"]);
                    jr.BUDGETITEM = ConvertUtil.ToString(dt.Rows[0]["GLACCOUNT"]);
                    jr.COSTCENTERCODE = ConvertUtil.ToString(dt.Rows[0]["COSTCENTERNAME"]);
                }
            }
            josnString = MyLib.SerializeUtil.JsonSerialize(jr);//转换成json
            this.response.Write(josnString);
        }
     //自定义一个类,主要用来存值
        public class JsonRow
        {
            public string ITEMCODE { get; set; }
            public string PSP { get; set; }
            public string BUDGETITEM { get; set; }
            public string COSTCENTERCODE { get; set; }
        }    

上述代码是一般处理程序中的代码,下面还有一个生成自带的类,就没有放上去,主要就是有一个自定义类,这里的类名和我前台需要赋值的控件id一样,差一个前缀,具体作用会在前台说明。这里由于我是只给几个控件赋值,所以没必要使用datatable,并且是一行数据,如果是多行的话这里赋值的过程需要写一个for循环。

接下来是前台js的代码

function onChangerBudget(id) {
    var url = "/Solution/A06003/Ajax/BudgetHandler.ashx";
    var ID = id;
    if (ID != null && ID != "") {
        $.ajax({
            url: url,
            type: "POST",
            async: false,
            dataType: "json",
            data: { ID: ID },
            success: function (data) {
                if (data != null && data != "") {
                    for (var k in data) {
                        $("input[id$=fld_" + k + "]").val(data[k]);
                    }
                }
            }
        });
    }
}

以上url是一般处理程序的路径,type是传值方式,datatype是接受值类型,data是参数

ajax的调用我就不赘述了,这里主要是success里对接受的json类型值的处理,上述方法是对于 {"name":"Liza", "password":"123"} json对象进行处理,方法中的k是键,data[k]是值。 $("input[id$=fld_" + k + "]").val(data[k]); 这里的 k 就是在一般处理程序中自定义的类里面的字段,而 data[k] 就是方法里对它赋的值,在前面已经说过类里的字段是使用的前台控件id后缀 加上与 “fld_” id前缀拼接就组成了完整的id,自己就可以进行赋值了。

另一种是 [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}] json数组的处理

for(var i in packJson){//遍历packJson 数组时,i为索引
alert(packJson[i].name + " " + packJson[i].password);
}
这种的由于没有尝试过,暂时先记下来,以后肯定有用得到的地方。
这次的总结记录就这么多。
原文地址:https://www.cnblogs.com/HulkDeng/p/13373165.html