• 基于jQuery的AJAX和JSON实现纯html数据模板


    通过jQuery内置的AJAX功能,直接访问后台获得JSON格式的数据,然后通过jQuer把数据绑定到事先设计好的html模板上,直接在页面上显示。


    我们先来看一下html模板:

    <!--[if !vml]--><!--[endif]-->            HTML代码
    1.<TABLE style="BORDER-COLLAPSE: collapse" id=datas border=1 cellSpacing=0><TBODY><TR><TH>订单ID</TH><TH>客户ID</TH><TH>雇员ID</TH><TH>订购日期</TH><TH>发货日期</TH><TH>货主名称</TH><TH>货主地址</TH><TH>货主城市</TH><TH>更多信息</TH></TR><TR id=template><TD id=OrderID> </TD><TD id=CustomerID> </TD><TD id=EmployeeID> </TD><TD id=OrderDate> </TD><TD id=ShippedDate> </TD><TD id=ShippedName> </TD><TD id=ShippedAddress> </TD><TD id=ShippedCity> </TD><TD id=more> </TD></TR></TBODY></TABLE>







    <!--[if !vml]--><!--[endif]-->

      


            一定要注意的就是里面所有的id属性,这个是一个关键。再来看一下AJAX请求和绑定数据的代码。




    <!--[if !vml]--><!--[endif]-->

    <!--[if !vml]--><!--[endif]-->      JavaScript代码

    01.$.ajax(...{
    02.            type: "get",//使用get方法访问后台
    03.            dataType: "json",//返回json格式的数据
    04.            url: "BackHandler.ashx",//要访问的后台地址
    05.            data: "pageIndex=" + pageIndex,//要发送的数据
    06.            complete :function()...{$("#load").hide();},//AJAX请求完成时隐藏loading提示
    07.            success: function(msg)...{//msg为返回的数据,在这里做数据绑定
    08.                var data = msg.table;
    09.                $.each(data, function(i, n)...{
    10.                    var row = $("#template").clone();
    11.                    row.find("#OrderID").text(n.订单ID);
    12.                    row.find("#CustomerID").text(n.客户ID);
    13.                    row.find("#EmployeeID").text(n.雇员ID);
    14.                    row.find("#OrderDate").text(ChangeDate(n.订购日期));
    15.                    if(n.发货日期!== undefined) row.find("#ShippedDate").text(ChangeDate(n.发货日期));
    16.                    row.find("#ShippedName").text(n.货主名称);
    17.                    row.find("#ShippedAddress").text(n.货主地址);
    18.                    row.find("#ShippedCity").text(n.货主城市);
    19.                    row.find("#more").html("<A href='OrderInfo.aspx?id="' n.订单id=""> More</A>");                    
    20.                    row.attr("id","ready");//改变绑定好数据的行的id
    21.                    row.appendTo("#datas");//添加到模板的容器中
    22.                });







    <!--[if !vml]--><!--[endif]-->

            这个是jQuery的AJAX方法,返回数据并不复杂,主要说明一下怎么把数据按模板的定义显示到到页面上。首先是这个“var row = $("#template").clone();”先把模板复制一份,接下来row.find("#OrderID").text(n.订单ID);,表示找到id=OrderID的标记,设置它的innerText为相应的数据,当然也可以设置为html格式的数据。或者是通过外部的函数把数据转换成需要的格式,比如这里row.find("#OrderDate").text(ChangeDate(n.订购日期));有点服务器控件做模板绑定数据的感觉。


           


            所有的这些,都是放在一个静态的页面里,只通过AJAX方法从后台获取数据,所有html代码如下:




    <!--[if !vml]--><!--[endif]-->HTML代码

    1.<script language="javascript" type="text/javascript" src="js/jquery-latest.pack.js"></script>
    2.<script language="javascript" type="text/javascript" src="js/PageDate.js"></script>
    3.<DIV> <DIV><BR>             <INPUT id=first value="  <<  " type=button><INPUT id=previous value="  <  " type=button><INPUT id=next value="  >  " type=button><INPUT id=last value="  >>  " type=button>                           <TABLE style="BORDER-COLLAPSE: collapse" id=datas border=1 cellSpacing=0><TBODY><TR><TH>订单ID</TH><TH>客户ID</TH><TH>雇员ID</TH><TH>订购日期</TH><TH>发货日期</TH><TH>货主名称</TH><TH>货主地址</TH><TH>货主城市</TH><TH>更多信息</TH></TR><TR id=template><TD id=OrderID> </TD><TD id=CustomerID> </TD><TD id=EmployeeID> </TD><TD id=OrderDate> </TD><TD id=ShippedDate> </TD><TD id=ShippedName> </TD><TD id=ShippedAddress> </TD><TD id=ShippedCity> </TD><TD id=more> </TD></TR></TBODY></TABLE></DIV>         <DIV style="POSITION: absolute; BACKGROUND-COLOR: red; TOP: 0px; LEFT: 0px" id=load>LOADING....</DIV>         <INPUT id=pagecount type=hidden></DIV>







    <!--[if !vml]--><!--[endif]-->

        PageData.js就是包括上面AJAX请求和绑定数据代码的js,整个页面连form都不用,这样做有什么好处呢。再看下面一个模板




    <!--[if !vml]--><!--[endif]-->            <ul id="datas">



    <!--[if !vml]--><!--[endif]-->                <li id="template">



    <!--[if !vml]--><!--[endif]-->                    <span id="OrderID">



    <!--[if !vml]--><!--[endif]-->                        fsdfasdf



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="CustomerID">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="EmployeeID">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="OrderDate">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="ShippedDate">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="ShippedName">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="ShippedAddress">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="ShippedCity">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                    <span id="more">



    <!--[if !vml]--><!--[endif]-->                    </span>



    <!--[if !vml]--><!--[endif]-->                </li>



    <!--[if !vml]--><!--[endif]-->            </ul>


    把datatable直接序列化为json:


    用Newtonsoft.Json.dll进行json序列化,这个从json的官网上就可以找到,使用比较方便。


    ,然后用StringBuilder来构造成JSON格式也不是很复杂。函数代码如下:




    <!--[if !vml]--><!--[endif]-->    Java代码

    01.private string DataTable2Json(DataTable dt)
    02.    ...{
    03.        StringBuilder jsonBuilder = new StringBuilder();
    04.        jsonBuilder.Append("{\"");
    05.        jsonBuilder.Append(dt.TableName);
    06.        jsonBuilder.Append("\":[");
    07.        for (int i = 0; i < dt.Rows.Count; i++)
    08.        ...{
    09.            jsonBuilder.Append("{");
    10.            for (int j = 0; j < dt.Columns.Count; j++)
    11.            ...{
    12.                jsonBuilder.Append("\"");
    13.                jsonBuilder.Append(dt.Columns[j].ColumnName);
    14.                jsonBuilder.Append("\":\"");
    15.                jsonBuilder.Append(dt.Rows[i][j].ToString());
    16.                jsonBuilder.Append("\",");
    17.            }
    18.            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
    19.            jsonBuilder.Append("},");
    20.        }
    21.        jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
    22.        jsonBuilder.Append("]");
    23.        jsonBuilder.Append("}");
    24.        return jsonBuilder.ToString();
    25.    }




    这一行“jsonBuilder.Remove(jsonBuilder.Length - 1, 1);”是为了去掉最后一个多于的逗号,当然这个函数不能操作比较包含复杂数据类型的DataTable

    jQuery操作ajax处理json数据[Demo]

     

    Default.html前台页面代码
    HTML代码

    01.      
    02.    <script type=”text/javascript” src=”js/jquery-1.2.1.pack.js”></script>
    03.<script type=”text/javascript”>
    04.    $(document).ready(function (){
    05.        $(”#btnOK”).click(function (){
    06.            $.getJSON(
    07.                “Handler.ashx”,
    08.                {},
    09.                function(json){
    10.                    $(”#list”).append(”<LI>id:”+json.EmployeeId+”|Name:”+json.EmployeeName+”| 年龄:”+json.EmployeeInfo[0]+”|身高:”+json.EmployeeInfo[1]+”|体 重:”+json.EmployeeInfo[2]+”</LI>”);
    11.                }
    12.            )
    13.        })
    14.    })
    15.</script>
    16.  
    17.    <INPUT id=”btnOK” value=”加载数据” type=”button”/>

     

    ———————
    Handler.ashx服务器端处理请求的代码
    XHTML代码

    01.<%@ WebHandler Language=”C#” Class=”Handler” %>
    02.  
    03.using System;
    04.using System.Web;
    05.using System.Web.UI.HtmlControls;
    06.using System.Runtime.Serialization;
    07.using Newtonsoft.Json;
    08.  
    09.public class Handler : IHttpHandler {
    10.     
    11.    public void ProcessRequest (HttpContext context) {
    12.        context.Response.ContentType = “text/plain”;
    13.        context.Response.Write(ReturnResult()); 
    14.    }
    15.  
    16.    public string ReturnResult() {
    17.        Employee employee = new Employee();
    18.        employee.EmployeeId = 1;
    19.        employee.EmployeeName = “yang”;
    20.        employee.EmployeeInfo = “25,170cm,55kg”.Split(’,');
    21.        string jsonstr = JavaScriptConvert.SerializeObject(employee);
    22.        return jsonstr;
    23.    }
    24.    public bool IsReusable {
    25.        get {
    26.            return false;
    27.        }
    28.    }
    29.  
    30.    class Employee
    31.    {
    32.        public int EmployeeId;
    33.        public string EmployeeName;
    34.        private string[] employeeInfo;
    35.        public string[] EmployeeInfo
    36.        {
    37.            get { return employeeInfo; }
    38.            set { employeeInfo = value; }
    39.        }
    40.    }
    41.}

    本人声明: 个人主页:沐海(http://www.cnblogs.com/mahaisong) 以上文章都是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言或加我QQ!欢迎交流!
  • 相关阅读:
    linux终端发送邮件
    ubuntu交换Caps 和 ESC
    pycharm快捷键
    python catch socket timeout
    pgsql restart
    python re.sub
    文件写入与缓存
    HTTP协议再分析
    leetcode-45
    Java的锁
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2031318.html
Copyright © 2020-2023  润新知