使用html,JavaScript,ajax写一个小型实例

//1.创建受捐单位数组
var arrOrgData = [
     { "Id" : 1, "OrgName" : "红十字会" },
     { "Id" : 2, "OrgName" : "壹基金" },
     { "Id" : 3, "OrgName" : "中华慈善总会" },
     { "Id" : 4, "OrgName" : "中国扶贫基金会" }
];
//1-1.根据受捐单位id,返回受捐单位元素,动态绑定(定义)方法
arrOrgData.getOrgById = function (id) {
     for ( var i = 0; i < this .length; i++) {
         if ( this [i].Id == id) {
             return this [i];
         };
     };
};
//2.详细捐赠信息数组
var arrDetailData = [
     { "Id" : 1, "Name" : "成龙" , "OrgId" : 1, "Money" : "1000" , "Time" : "2013 - 07 - 08" },
     { "Id" : 2, "Name" : "肥龙" , "OrgId" : 2, "Money" : "2000" , "Time" : "2013 - 07 - 08" },
     { "Id" : 3, "Name" : "瘦龙" , "OrgId" : 3, "Money" : "3000" , "Time" : "2013 - 07 - 08" },
     { "Id" : 4, "Name" : "傻龙" , "OrgId" : 4, "Money" : "4000" , "Time" : "2013 - 07 - 08" }
];
//2.1.根据id删除数组元素
arrDetailData.deleteById = function (id) {
     for ( var i = 0; i < this .length; i++) {
         if ( this [i].Id == id) {
             //元素前移
             for ( var j = i; j < this .length - 1; j++) {
                 this [j] = this [j + 1];
             };
             //数组长度--
             this .length--;
             break ;
         };
     };
};
//2-2.更新数据,model-修改后的对象
arrDetailData.update = function (model) {
     for ( var i = 0; i < this .length; i++) {
         if ( this [i].Id == model.Id) {
             this [i] = model;
             break ;
         };
     };
};
//2-3.新增数据,并返回新增的元素
var modelId=arrDetailData.length; //定义变量,存储数组元素的Id
arrDetailData.addModel = function (model) {
     modelId++; //每次添加序号++
     model.Id = modelId; //设置添加对象的Id
     this [ this .length] = model; //数组元素++,在length
     return model;
};
//2-4.根据捐赠单位Id返回数组
arrDetailData.getSearchData = function (id) {
     if (id==-1){ //id为-1返回所有数据
         return this ;
     };
     //定义存储查询数据的数组
     var arrSearch = new Array();
     for ( var i = 0; i < this .length; i++) {
         if ( this [i].OrgId==id){ //判断OrgId是否符合条件
             arrSearch[arrSearch.length]= this [i];
         };
     };
     return arrSearch;
};
//2-5.返回一页数据
arrDetailData.pageIndex = 1; //页码
arrDetailData.pageCount = 5; //每页记录条数
arrDetailData.pages=0; //总页数
//返回第pageIndex页数据
arrDetailData.getPageData = function () {
     var pageData = new Array(); //定义数组存储一页数据
     for ( var i = ( this .pageIndex - 1) * this .pageCount; i < this .pageIndex * this .pageCount; i++) { //获取第pageIndex页数据
         //alert(this[i]);
         if ( this [i]) { //判断this[i]是否undefined,过滤掉
             pageData[pageData.length] = this [i];
         };
     }
     return pageData;
};
//3.加载受捐单位信息,element-传入select对象
function loadOrgData(element) {
     for ( var i = 0; i < arrOrgData.length; i++) {
         var opt = new Option(arrOrgData[i].OrgName, arrDetailData[i].Id);
         element.options.add(opt);
     };
};
//4.加载表数据(详细信息)
function loadDetailData() {
     for ( var i = 0; i < arrDetailData.length; i++) {
         addTr(arrDetailData[i]);
     }
};
//4-1.加载表数据,arr数组数据
function loadDataToTb(arr) {
     for ( var i = 0; i < arr.length; i++) {
         addTr(arr[i]);
     };
};
//4-1.插入一行,model-数组元素
function addTr(model) {
     var tb = getElement( "tbList" ); //获得表对象
     var tr = tb.insertRow(-1); //插入一行
     tr.insertCell(-1).innerHTML = model.Id; //插入序号列
     tr.insertCell(-1).innerHTML = model.Name; //插入名称列
     var td = tr.insertCell(-1); //插入OrgId列
     td.setAttribute( "OrgId" , model.OrgId); //保存OrgId到td的OrgId属性(自定义)
     td.innerHTML = arrOrgData.getOrgById(model.OrgId).OrgName; //设置捐赠单位名称
     tr.insertCell(-1).innerHTML = model.Money; //插入金额列
     tr.insertCell(-1).innerHTML = model.Time; //插入捐赠时间列
     tr.insertCell(-1).innerHTML = "<a href='#' onclick='setUpdateState(this)'>修改</a>&nbsp;&nbsp;<a href='#' onclick='deleteRow(this)'>删除</a>" ; //操作列
};
//5.根据标签id获得标签对象
function getElement(id) {
     return document.getElementById(id);
};
//6.删除行,element-当前点击de
function deleteRow(element) {
     if (GlobalUpdateTr != null ) { //判断当前是否修改状态
         rollBack(GlobalUpdateTr);
     };
     if (!confirm( "确定删除吗?" )) { //确认是否要移除
         return ;
     };
     var delTr = element.parentNode.parentNode; //获取删除行
     delTr.parentNode.removeChild(delTr); //移除行
     arrDetailData.deleteById(delTr.childNodes[0].innerHTML); //删除对应的数组元素
};
//7.修改行
//7-1.定义全局变量,三个文本框一个下拉列表,一个存储修改行的变量GlobalUpdateTr,标记修改状态
var inputPersonName = document.createElement( "input" ); //捐赠人名称
inputPersonName.type = "text" ;
var inputMoney = document.createElement( "input" ); //捐赠金额
inputMoney.type = "text" ;
var inputTime = document.createElement( "input" ); //捐赠时间
inputTime.type = "text" ;
var selectOrg = document.createElement( "select" ); //受捐单位下拉列表
var GlobalUpdateTr = null ; //存储修改行,标记是否修改状态
//7.2.设置当前行,为修改状态,obj-当前点击对象
function setUpdateState(element) {
     if (GlobalUpdateTr != null ) { //判断是否已经在修改状态
         rollBack(GlobalUpdateTr); //还原
     };
     GlobalUpdateTr = element.parentNode.parentNode; //获得当前修改行
     txtToInput(GlobalUpdateTr.childNodes[1], inputPersonName);
     txtToInput(GlobalUpdateTr.childNodes[3], inputMoney);
     txtToInput(GlobalUpdateTr.childNodes[4], inputTime);
     txtToSelect(GlobalUpdateTr.childNodes[2], selectOrg);
     GlobalUpdateTr.childNodes[5].innerHTML = "<a href='#' onclick='update(this)'>确定</a>&nbsp;&nbsp;<a href='#' onclick='exitUpdateState(this)'>取消</a>" ; //设置操作列
};
//7-2-1.当前行设置为修改状态(文本设为文本框)(td:列,element:文本框)
function txtToInput(td,element) {
     element.value = td.innerHTML; //设置obj的值
     td.setAttribute( "oldValue" ,td.innerHTML); //保存td的文本值,取消修改时要取的值
     td.appendChild(element); //往列td添加obj
     if (td.childNodes[1]) { //判断是否有文本节点
         td.removeChild(td.childNodes[0]); //移除td的文本节点
     };
};
//7-2-2.当前行设置为修改状态(文本设为下拉列)(td:列,element:下拉列)
function txtToSelect(td, element) {
     td.appendChild(element);
     td.removeChild(td.childNodes[0]);
     element.value = td.getAttribute( "OrgId" );
};
//7-3.取消修改,恢复界面,退出修改操作状态,element-当前点击对象
function exitUpdateState(element) {
     var cancelTr = element.parentNode.parentNode; //取得当前行
     rollBack(cancelTr);
     //退出修改状态
     GlobalUpdateTr = null ;
};
//还原,obj-当前修改行/之前的修改行
function rollBack(element) {
     element.childNodes[1].innerHTML = element.childNodes[1].getAttribute( "oldValue" ); //恢复原来的文本值(名称)
     element.childNodes[3].innerHTML = element.childNodes[3].getAttribute( "oldValue" ); //恢复原来的文本值(金额)
     element.childNodes[4].innerHTML = element.childNodes[4].getAttribute( "oldValue" ); //恢复原来的文本值(日期)
     element.childNodes[2].removeChild(selectOrg); //移除下拉列
     var orgId = element.childNodes[2].getAttribute( "OrgId" ); //取得捐赠单位id
     element.childNodes[2].innerHTML = arrOrgData.getOrgById(orgId).OrgName; //恢复原来的文本值(捐赠单位)
     element.childNodes[5].innerHTML = "<a href='#' onclick='setUpdateState(this)'>修改</a>&nbsp;&nbsp;<a href='#' onclick='deleteRow(this)'>删除</a>" ; //恢复操作列
};
//7-4.确定修改,更新界面,更新数据,修改完毕退出修改状态,element-当前点击对象
function update(element) {
     var updateTr = element.parentNode.parentNode; //取得当前行
     //更新界面
     updateTr.childNodes[1].innerHTML = inputPersonName.value;
     updateTr.childNodes[3].innerHTML = inputMoney.value;
     updateTr.childNodes[4].innerHTML = inputTime.value;
     updateTr.childNodes[2].removeChild(selectOrg);
     updateTr.childNodes[2].innerHTML = arrOrgData.getOrgById(selectOrg.value).OrgName;
     updateTr.childNodes[2].setAttribute( "OrgId" , selectOrg.value); //更新OrgId
     updateTr.childNodes[5].innerHTML = "<a href='#' onclick='setUpdateState(this)'>修改</a>&nbsp;&nbsp;<a href='#' onclick='deleteRow(this)'>删除</a>" ; //恢复操作列
     //更新数据
     //下拉列表的value值就是下拉列表当前选项的value值
     var model = { "Id" : updateTr.childNodes[0].innerHTML, "Name" : inputPersonName.value, "OrgId" : selectOrg.value, "Money" : inputMoney.value, "Time" : inputTime.value }; //创建与当前行数据对应的对象
     arrDetailData.update(model); //更新数组
     //退出修改状态
     GlobalUpdateTr = null ;
};
//-------窗口加载完毕触发--------//
window.onload = function () {
     //1.加载arrOrgData(to下拉列)
     loadOrgData(getElement( "selSearchOrg" ));
     loadOrgData(getElement( "selAddOrg" ));
     loadOrgData(selectOrg);
     //2.加载arrDetailData(to表)
     loadDetailData();
     //3.新增
     getElement( "btnAdd" ).onclick = function () {
         var model = { "Name" : getElement( "txtName" ).value, "OrgId" : getElement( "selAddOrg" ).value, "Money" : getElement( "txtMoney" ).value, "Time" : getElement( "txtDate" ).value }; //创建一个新数组元素对象
         model = arrDetailData.addModel(model); //返回新增的元素
         addTr(model); //插入新行到表显示
     };
     //4.查询(先删除当前界面所有行,再添加)
     getElement( "btnSearch" ).onclick = function () {
         var tbList = getElement( "tbList" ); //获得表
         for ( var i = tbList.rows.length - 1; i >= 1; i--) { //遍历删除表的行,从末端开始
             tbList.deleteRow(i); //删除一行
         }
         var searchId = getElement( "selSearchOrg" ).value; //要查询的捐赠单位id
         var arrSearchData = arrDetailData.getSearchData(searchId); //得到查询数据
         loadDataToTb(arrSearchData); //(加载)显示查询数据
     };
     //5.分页(先删除当前界面所有行,再添加)
     //5-1.下一页
     getElement( "btnnextPage" ).onclick = function () {
         if (arrDetailData.length == 0) {
             alert( "没有数据" );
         };
         //获取总页数
         arrDetailData.pages = arrDetailData.length % arrDetailData.pageCount != 0 ? (arrDetailData.length - arrDetailData.length % arrDetailData.pageCount) / arrDetailData.pageCount + 1 : arrDetailData.length / arrDetailData.pageCount;
         if (arrDetailData.pageIndex == arrDetailData.pages) { //判断是否最后一页
             alert( "最后一页啦" );
             return ; //返回
         };
         var tbList = getElement( "tbList" ); //获得表对象
         for ( var  i= tbList.rows.length-1;i>=1; i--) { //删除表所有行
             tbList.deleteRow(i);
         }
         arrDetailData.pageIndex++; //页码++,取得下一页
         var arrPage = arrDetailData.getPageData(); //获得一页数据
         loadDataToTb(arrPage); //加载显示到表
     };
     //5-2.上一页
     getElement( "btnprePage" ).onclick = function () {
         if (arrDetailData.length == 0) {
             alert( "没有数据"
 
         };
         //获取总页数
         arrDetailData.pages = arrDetailData.length % arrDetailData.pageCount != 0 ? (arrDetailData.length - arrDetailData.length % arrDetailData.pageCount) / arrDetailData.pageCount + 1 : arrDetailData.length / arrDetailData.pageCount;
         if (arrDetailData.pageIndex==1){ //判断是否第一页
             alert( "这个第一页" );
             return ;
         };
         var tbList = getElement( "tbList" ); //获得表对象
         for ( var i = tbList.rows.length - 1; i >= 1; i--) { //删除表所有行
             tbList.deleteRow(i);
         }
         arrDetailData.pageIndex--; //页码--,取得上一页
         var arrPage = arrDetailData.getPageData(); //获得一页数据
         loadDataToTb(arrPage); //加载显示到表
     };
};
//这是显示的效果

转载于:https://www.cnblogs.com/luoqin520/p/xaioqinzi.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在嵌入式web服务器boa框架的基础上, 使用C语言cgi, 或者Python脚本, 结合HTML + javascript + ajax 的嵌入式web系统的开发实例 html使用javascritp + ajax 从C语言生成的cgi文件的get, set 一些值. boa服务器的相关配置参数说明: http://www.cnblogs.com/liuweiqiang/p/3859130.html boa安装包文件名: boa-for-hi3516a.tar.gz boa.conf 文件的保存路径: cat /etc/boa/boa.conf boa可 执行文件的路径: /usr/local/bin/boa, 可以设置为: 系统启动的时候, 这个进程自动启动 boa.conf 文件的重要参数 保存html文件的目录 DocumentRoot /www 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 保存python脚本, 或者C语言cgi文件的目录 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 说明: cgi-bin/ 后面的斜杠, 一定要加上 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 html文件文件中, 调用python脚本的时候, 指定的路径, 需要有: /cgi-bin, 比如: var url = "/cgi-bin/getuser.py"; 这个是python 或者 var url = "/cgi-bin/output.cgi"; 这个是C语言 说明: 如果发现, html文件, 修改了, 可是在浏览器中, 查看html源代码的时候, 这个代码, 还是旧的, 那么可以通过清空"IE浏览器", "360浏览器"的浏览记录 以上, javascript 可以调用python 同样, 也可以调用C语言生成的cgi文件(其实, 就是可执行文件) C语言 + Html 例子 C语言 CGI实例 http://blog.csdn.net/ajrm0925/article/details/8810342 http://blog.csdn.net/liang890319/article/details/6277900 http://blog.csdn.net/gnefniu/article/details/42432657 上传文件: http://blog.csdn.net/yu_xiang/article/details/7996670 查找文件 find . -type f -name "boa.conf" -print -mount find . -type f -name "boa" -print -mount 四、嵌入式web服务器boa的配置和使用 嵌入式web服务器boa的配置文件为boa.conf, 在boa-0.94.13目录下面,复制该文件到文件 系统的/etc/boa目录下面,打开boa.conf,修改为如下内容: Port 80 User root Group root ErrorLog /dev/console AccessLog /dev/null ServerName SoftEmbed.com DocumentRoot /www DirectoryIndex index.html KeepAliveMax 1000 KeepAliveTimeout 10 MimeTypes /etc/mime.types DefaultType text/plain CGIPath /bin:/usr/bin:/usr/local/bin ScriptAlias /cgi-bin/ /www/cgi-bin/ 几个重要配置参数如下: DocumentRoot: 存放html文档的主目录; DirectoryIndex: 默认返回的html文档; ScriptAlias:cgi脚本虚拟路径对应的实际路径,/www/cgi-bin/为cgi脚本存放的实际路径; 其他配置选项的意义请参考相关资料。 复制boa可执行文件到/usr/sbin目录中, 启动boa进程 重新制作文件系统,系统启动后,在客户端浏览器上输入开发板的ip 地址,例如: http://192.168.0.218, 就可以看到显示的测试网页了,如下图所示 CGI getenv函数的参数详解: http://www.cnblogs.com/ser0632/p/5498228.html s = getenv("环境变量名"); 取得环境变量内容 putenv改变或增加环境变量 int putenv(const char * string); setenv(改变或增加环境变量) http://www.jb51.net/article/71940.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值