ajax数据读取和绑定

  如何进行ajax数据读取和绑定呢?

  • 首先创建一个AJAX对象
  • 实现数据绑定
  • 实现隔行变色
  • 编写表格排序的方法(实现按照年龄这一列进行排序)
  • 通过文档碎片,把排序后的最新顺序,重新添加到tBody中(通过文档碎片,有效的避免了回流耗性能的问题,浏览器不用每当HTML结果发生改变,就重新对当前的页面进行渲染)
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Document</title>
  6     <style>
  7         .bg {
  8             background: yellowgreen;
  9         }
 10     </style>
 11 </head>
 12 <body>
 13 <table style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=40 cellPadding=1 width=250 align=center border=1
 14        id="tab">
 15     <thead>
 16     <tr>
 17         <td>姓名</td>
 18         <td>年龄</td>
 19         <td>性别</td>
 20     </tr>
 21     </thead>
 22     <tbody>
 23
 24     </tbody>
 25 </table>
 26
 27 <script type="text/javascript">
 28     var oTab = document.getElementById(‘tab‘);
 29     var tHead = oTab.tHead;
 30     var oThs = tHead.rows[0].cells;
 31     console.log(oThs);
 32     var tBody = oTab.tBodies[0];
 33     var oRows = tBody.rows;
 34
 35     //将json字符串转为json对象
 36     function jsonParse(str) {
 37         return JSON in window ? JSON.parse(str) : eval(‘(‘ + str + ‘)‘);
 38     }
 39     //实现数据绑定
 40     function bind() {
 41         var frg = document.createDocumentFragment();
 42         for (var i = 0; i < data.length; i++) {
 43             var cur = data[i];
 44             var oTr = document.createElement(‘tr‘);
 45             for (var key in cur) {
 46
 47                 var oTd = document.createElement(‘td‘);
 48                 if (key === ‘sex‘) {
 49                     oTd.innerHTML = cur[key] === 0 ? ‘男‘ : ‘女‘;
 50                 } else {
 51                     oTd.innerHTML = cur[key];
 52                 }
 53                 oTr.appendChild(oTd);
 54             }
 55             frg.appendChild(oTr);
 56         }
 57         console.log(frg);
 58         tBody.appendChild(frg);
 59         frg = null;
 60     }
 61     //创建一个ajax对象
 62     var data = null;
 63     var xhr = new XMLHttpRequest;
 64     xhr.open(‘get‘, ‘data.txt‘, true);
 65     xhr.send();
 66     xhr.onreadystatechange = function () {
 67
 68         if (xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)) {
 69             var val = xhr.responseText;
 70             data = jsonParse(val);
 71             bind();
 72             changeBg();
 73 //            sort()
 74
 75
 76         }
 77     }
 78     //实现隔行变色
 79     function changeBg() {
 80         for (var i = 0; i < oRows.length; i++) {
 81             oRows[i].className = i % 2 === 1 ? ‘bg‘ : null;
 82         }
 83     }
 84     //编写表格排序方法:实现按照年龄这一列进行排序
 85     function sort() {
 86         //把存储所有的行的类数组转换为数组
 87         console.log(oRows);
 88         var ary = listToArray(oRows);
 89         var _this = this;
 90
 91         //给数组进行排序,按照每一行的第二列中的内容有小到大排序
 92         console.log(ary);
 93         _this.flag *= -1;
 94         ary.sort(function (a, b) {
 95             //this->window;
 96             return parseFloat(a.cells[1].innerHTML) - parseFloat(b.cells[1].innerHTML) * _this.flag;
 97         })
 98         console.log(ary);
 99
100         //按照ary中的最新顺序,把每一行重新的添加到tbody中
101
102         var frg = document.createDocumentFragment();
103         for (var i = 0; i < ary.length; i++) {
104             frg.appendChild(ary[i]);
105         }
106         tBody.appendChild(frg);
107         frg = null;
108     }
109     //当点击第二列,实现一次升序,再点击降序
110     oThs[1].flag = -1;        //给当前这一列增加一个自定义属性flag
111     oThs[1].onclick = function () {
112     //    sort();
113         sort.call(this);    //this->oThs[1]
114     }
115     //类数组转成数组
116     function listToArray(likeAry) {
117         var ary = [];
118         try {
119             ary = Array.prototype.slice.call(likeAry);
120         } catch (e) {
121             for (var i = 0; i < likeAry.length; i++) {
122                 ary[ary.length] = likeAry[i];
123             }
124         }
125         return ary;
126     }
127
128 </script>
129 </body>
130 </html>

效果图:

时间: 2024-08-03 09:28:47

ajax数据读取和绑定的相关文章

项目中使用的ajax异步读取数据结构设计

设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面.虽然如此,但感觉比较灵活. 和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法. 这样数据控件指生成纯数据. ajax异步读取 使用了jQuery.ajax,通过ajax POST方式请求后台处理ashx页面,并传递相关参数. ashx 完成动态加载用户控件,并根据接收的参数对控件的属性进行赋值. 加载控件,借助于博客园老赵的一篇博文,链接找不到了,以后再补. public class View

kkpager的改进,Ajax数据变化但是页码不变的有关问题

kkpager的改进,Ajax数据变化但是页码不变的问题kkpager 是一个简单分页展示插件,需要依赖jquery.下载地址:http://www.oschina.net/action/project/go?id=29450&p=download官方文档地址:https://github.com/pgkk/kkpager 在线测试链接: 蓝色皮肤:http://pgkk.github.io/kkpager/example/pager_test.html 橘色皮肤:http://pgkk.git

ASP.NET中关于XML的AJAX的读取与删除

一个XML文件,名称就暂定为GroupStudents.xml吧,内容如下: <?xml version="1.0" encoding="utf-8"?> <GroupStutents> <GroupStutent value="个人资料"> <Item> <ID>0011-0220-302</ID> <Name>名称01</Name> <Sta

vue中如何实现数据的双向绑定

vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this.value;会导致循环调用set方法,所以要借助中间对象的形式把值赋给中间对象,获取obj.name的时候我们获取中间对象的最新值即可 let obj = {name:'zhufeng',age:9};//数据 let temp = {name:"lily"};//借助中间对象 let

Ajax --- 数据请求

下面主要介绍(JS原生)数据请求的主要步骤: Ajax 数据请求步骤: 1.创建XMLHttpRequest对象 2.准备数据发送 3.执行发送 4.指定回掉函数 第一步:创建XMLHttpRequest对象 1 var xhr = new XMLHttpRequest(); // 标准浏览器 2 3 var xhr = new ActiveXObject('Microsoft.XMLHTTP'); // IE6 第二步:使用 open() 方法将参数传入 1 xhr.open('get','.

数据的双向绑定 Angular JS

接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 视图模型的继承关系 模块和依赖注入的设计 待定 数据的双向绑定 Angular实现了双向绑定机制.所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面. 一个最简单的示例就是这样: <div ng-controller="CounterCtrl"> &

DataReader对象(数据读取)

DataReader对象提供了一个只进只读的数据读取器,用于从查询结果中读取数据,它每次仅能读取一行数据. [常用属性]: FieldCount:获取当前行的列数: HasRows:表明查询结果中是否还存在未被读取的数据. [常用方法]: Close:关闭SqlDataReader对象: GetName:获取指定列的名称; Read:使SqlDataReader前进到下一条记录. [使用DataReader对象对数据库进行查询操作步骤]: 1.创建Connection对象: 2.打开数据库连接:

sas数据读取详解 四种读取数据方式以及数据指针的位置 、读取mess data的两个小工具、特殊的读取技巧、infile语句及其选项(dsd dlm missover truncover obs firstobs)、proc import、自定义缺失值

(The record length is the number of characters, including spaces, in a data line.) If your data lines are long, and it looks like SAS is not reading all your data, then use the LRECL= option in the INFILE statement to specify a record length at least

AJAX 实时读取输入文本(php)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-