有时候我们使用Ajax链接一般处理程序需要返回多个值,然而这些数据并非在一个查询表内,此时便想到构造一个虚拟的DataTable,这样就可以返回多个值了(当然有很多办法,这是其中一种 )。
首先我们需要准备一个 script 和一个 ashx 文件。
在script中写一个ajax用于接收返回来的数据,代码如下。
<script type="text/javascript"> $(function () { $.ajax({ type: "post", //提交方式 url: "/ashx/PersonnelRegistrationForm.ashx", //一般处理程序的路径 data: { corpName: corpName, corpCode: corpCode }, //向后台传入的值 success: function (data) { //返回成功后将要做的事,这里是返回一个表 var datainfo = $.parseJSON(data);
alert(datainfo[0].OrderNo);
alert(datainfo[0].RowGuid);
alert(datainfo[0].ResultNum);
}, error: function () { alert('系统发生错误'); } }); }) </script>
然后在名为PersonnelRegistratinForm一般处理程序进行数据处理,然后构造所需要的值将其返回。
#region 构造返回的表 DataTable table = new DataTable(); //构造表 DataColumn column1 = new DataColumn("ResultNum", Type.GetType("System.Int32")); //构造列及所对应的类型 DataColumn column2 = new DataColumn("OrderNo", Type.GetType("System.String")); DataColumn column3 = new DataColumn("RowGuid", Type.GetType("System.String")); table.Columns.Add(column1); //将列添加到table表中 table.Columns.Add(column2); table.Columns.Add(column3); DataRow dr = table.NewRow(); //table表创建行 dr["ResultNum"] = person_result; dr["OrderNo"] = OrderNo; dr["RowGuid"] = t_ROWGUID; table.Rows.Add(dr); //将数据加入到table表中 string json = SerializerHelper.ToJsonString(table); //序列化json对象 context.Response.Write(json); context.Response.End(); #endregion
构造table时可以使用简便写法:
DataTable table = new DataTable(); //构造表 table.Columns.Add("ResultNum", Type.GetType("System.Int32")); table.Columns.Add("OrderNo", Type.GetType("System.String")); table.Columns.Add("RowGuid", Type.GetType("System.String")); DataRow dr = table.NewRow(); //table表创建行 dr["ResultNum"] = person_result; dr["OrderNo"] = OrderNo; dr["RowGuid"] = t_ROWGUID; table.Rows.Add(dr); //将数据加入到table表中
这样前台的ajax就可以获取到返回过去的table了。当然别忘记引用命名空间
using System.Data; using System.Data.SqlClient; using System.Text;