Ajax在返回集合后,数据到复杂表格的应用

2023-11-15

通常, 我们无论是用普通Ajax机制还是利用框架,在处理返回的问题上,都会遇到这样的问题,如,我们要将一个List<Employee>集合的内容,插入到一个表格中,并且,表格的样式比较复杂,如果直接得到ajax的返回值,不做其他处理,那么我们在遍历这些值前,先要用js去拼接一个table,然后再循环将这些值加入到table表格中,这样,在遇到“” 时由于某些特殊情况,需要手动将“”改写成’’,这就增加了太多工作量,那么,有没有一个简单的方法呢,思考一下,当然是有了。

 

原理:

利用ajax发送请求后,在后台的控制服务中,仍加上forword,这里假设跳转到forward.jsp。和普通的servie一样,跳转到一个页面,这个页面就是一个DIV里套一个table,将这个List<Employee>Cforeach标签遍历。然后,只需要在成功之后将xmlHttp.responseText 赋值到一个Div里面,而这个DIV正是包含forward.jsp.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Js代码
  1. var len=jsonObj.length;  
  2.       
  3.      var str='<table width="86%" border="0" cellpadding="0" cellspacing="1" bgcolor="#eae7db"& gt;<tr><td bgcolor="#FFFFFF">< table width="100%" border="0" cellspacing="0" cellpadding="3">< tr class="tx_test"><td width="3%" height="5"></td>< td width="13%"></td><td width="21%"></td>< td width="21%"></td><td width="21%"></td>< td width="21%"></td></tr><tr class="tx_test">< td width="13%" class="regrist_title_12">&nbsp;&nbsp;& nbsp;&nbsp;早餐</td></tr>';  
  4.      var lunch='<tr class="tx_test"& gt;<td width="13%"class="regrist_title_12">&nbsp;&nbsp;& amp;nbsp;&nbsp;午餐</td></tr>';  
  5.      var dinner='<tr class="tx_test"& gt;<td width="13%"class="regrist_title_12">&nbsp;&nbsp;& amp;nbsp;&nbsp;晚餐</td></tr>';  
  6.      var dim='<tr class="tx_test"& gt;<td width="13%"class="regrist_title_12">&nbsp;&nbsp;& amp;nbsp;&nbsp;点心</td></tr>';  
  7.       
  8.      for(var i=0;i<len;i++){  
  9.       var food=jsonObj[i];  
  10.       var kind=food.userFoodKind;  
  11.       
  12.       var foodArea=food.foodArea;  
  13.       var name=food.foodName;  
  14.       var unit=food.foodBasicUnit;  
  15.       var mete=food.basicmete;  
  16.       var caloriesimple=food.caloriesimple;  
  17.       
  18.        if(/^[0-9]+$/.test(caloriesimple)){  
  19.          caloriesimple=caloriesimple+".0";  
  20.       }  
  21.       var share=food.userfoodshare;  
  22.       var total=food.calorieTotal;  
  23.       if(/^[0-9]+$/.test(total)){  
  24.          total=total+".0";  
  25.       }  
  26.       var graphURL=food.graphURL;  
  27.        var sharemete=food.sharemete;  
  28.          
  29.        if(/^[0-9]+$/.test(sharemete)){  
  30.          sharemete=sharemete+".0";  
  31.       }  
  32.         
  33.         var areas="";  
  34.       if(foodArea!=""){  
  35.         
  36.       if(foodArea=="cn"){  
  37.         areas="中國大陸";  
  38.       }else if(foodArea=="tw"){  
  39.        areas="臺灣";  
  40.       }else {  
  41.        areas="歐美";  
  42.       }  
  43.        // name=name +"  ("+areas+")";  
  44.       }  
  45.         
  46.   
  47.   
  48.         
  49.         
  50.        if(kind==1) {  
  51.           str+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';  
  52.     }   
  53.     if(kind==2){  
  54.          lunch+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';  
  55.          }  
  56.     if(kind==3){  
  57.         dinner+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';  
  58.         }if(kind==4){  
  59.          dim+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';  
  60.      }  
  61.        
  62.   }  
  63.    var coms="<tr></tr></table></td></tr></table></td><td>&nbsp;</td></tr> <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> </table>"  
  64.   //   alert("div="+div);  
  65.            if(typeof total == "undefined" ){  
  66.             total="0.0";  
  67.          }  
  68.       //  alert("total="+total);  
  69.        var im=document.getElementById("grap");  
  70.         document.getElementById("grap").src=graphURL;  
  71.     //    alert("tolid="+tolid);  
  72.           document.getElementById(tolid).innerHTML=total;  
  73.             
  74.          document.getElementById(div).innerHTML=str+lunch+dinner+dim+coms;  
  75.          // alert(str+lunch+dinner+dim+coms);  
  76.           
  77.      }  
var len=jsonObj.length;
	
	 var str='<table width="86%" border="0" cellpadding="0" cellspacing="1" bgcolor="#eae7db"><tr><td bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="3"><tr class="tx_test"><td width="3%" height="5"></td><td width="13%"></td><td width="21%"></td><td width="21%"></td><td width="21%"></td><td width="21%"></td></tr><tr class="tx_test"><td width="13%" class="regrist_title_12">&nbsp;&nbsp;&nbsp;&nbsp;早餐</td></tr>';
	 var lunch='<tr class="tx_test"><td width="13%"class="regrist_title_12">&nbsp;&nbsp;&nbsp;&nbsp;午餐</td></tr>';
	 var dinner='<tr class="tx_test"><td width="13%"class="regrist_title_12">&nbsp;&nbsp;&nbsp;&nbsp;晚餐</td></tr>';
	 var dim='<tr class="tx_test"><td width="13%"class="regrist_title_12">&nbsp;&nbsp;&nbsp;&nbsp;点心</td></tr>';
	
	 for(var i=0;i<len;i++){
	  var food=jsonObj[i];
	  var kind=food.userFoodKind;
	
	  var foodArea=food.foodArea;
	  var name=food.foodName;
	  var unit=food.foodBasicUnit;
	  var mete=food.basicmete;
	  var caloriesimple=food.caloriesimple;
	
	   if(/^[0-9]+$/.test(caloriesimple)){
	     caloriesimple=caloriesimple+".0";
	  }
	  var share=food.userfoodshare;
	  var total=food.calorieTotal;
	  if(/^[0-9]+$/.test(total)){
	     total=total+".0";
	  }
	  var graphURL=food.graphURL;
	   var sharemete=food.sharemete;
	   
	   if(/^[0-9]+$/.test(sharemete)){
	     sharemete=sharemete+".0";
	  }
	  
	    var areas="";
	  if(foodArea!=""){
	  
	  if(foodArea=="cn"){
	    areas="中國大陸";
	  }else if(foodArea=="tw"){
	   areas="臺灣";
	  }else {
	   areas="歐美";
	  }
	   // name=name +"  ("+areas+")";
	  }
	  


	  
	  
	   if(kind==1) {
	      str+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';
	} 
	if(kind==2){
	     lunch+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';
	     }
	if(kind==3){
	    dinner+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';
	    }if(kind==4){
	     dim+='<tr><td width="13%" class="regrist_title_12"></td><td width="21%">'+name+'</td><td width="21%">'+areas+'</td><td width="21%">'+sharemete +unit+'</td><td width="21%">'+caloriesimple+'大卡</td></tr>';
	 }
	 
  }
   var coms="<tr></tr></table></td></tr></table></td><td>&nbsp;</td></tr> <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> </table>"
  //   alert("div="+div);
           if(typeof total == "undefined" ){
	        total="0.0";
	     }
	  //  alert("total="+total);
	   var im=document.getElementById("grap");
	    document.getElementById("grap").src=graphURL;
	//    alert("tolid="+tolid);
	      document.getElementById(tolid).innerHTML=total;
	      
	     document.getElementById(div).innerHTML=str+lunch+dinner+dim+coms;
	     // alert(str+lunch+dinner+dim+coms);
	    
	 }

 (这是最初的做法,很头疼的,也很麻烦,因为这里的table样式实在复杂,所以要自己拼接N多<td class=""> 之类,因为在JS里面,‘’与“”的用法问题,所以要手动改写很多地方,其实复杂就在这里了。所以本方案就是避开再这样拼接<xxx class=""  style]""> 之类的,所以采取直接将后台的数据写在一个Jsp中,然后在主页面,用这一句:

document.getElementById(contentDivId).innerHTML = xmlHttp.responseText;

 

如这里的index.js将forward.jsp里的内容InnerHTML完全赋到mydiv里了。这样看很明白了吧, xmlHttp.responseText其实就是forward.jsp页面里的内容)

 

 

 

 

 

 

  

 <div id="mydiv" style="width: 400px;height: 400px;border: 1px;border-style: solid;">
  读取的内容会在这里显示!!
  </div>

 

 

 

 

 

 

 

 

 

 

 

forward.jsp中则是显示后台数据,很普通的,

Html代码
  1. <body>  
  2.   <div id="report" style="width: 400px;">  
  3.  <table border="1"  style="border-style: solid;width: 98%;">  
  4.    
  5.  <c:forEach items="${users}" var="user">  
  6.  <tr>  
  7.  <td>${user.name }</td>   
  8.  <td>${user.age }</td>  
  9.   <td>${user.interest }</td>  
  10. </tr>  
  11.    
  12.  </c:forEach>  
  13.  </table>  
  14.    
  15.    
  16.    
  17.  </div>  
  18.  </body>  
 <body>
   <div id="report" style="width: 400px;">
  <table border="1"  style="border-style: solid;width: 98%;">
  
  <c:forEach items="${users}" var="user">
  <tr>
  <td>${user.name }</td> 
  <td>${user.age }</td>
   <td>${user.interest }</td>
 </tr>
  
  </c:forEach>
  </table>
  
  
  
  </div>
  </body>

 

 

 

 

 

巧妙之处就在这里了,这样我们仍然可以用JSTL标签之类的表示方法,避免写这样的拼字符串:

以下是js文件中代码:

 

 

Js代码
  1. function GetXmlHttpObject() {  
  2.     var xmlHttp = null;  
  3.     try {  
  4.   // Firefox, Opera 8.0+, Safari  
  5.         xmlHttp = new XMLHttpRequest();  
  6.     }  
  7.     catch (e) {  
  8.   // Internet Explorer  
  9.         try {  
  10.             xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");  
  11.         }  
  12.         catch (e) {  
  13.             xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
  14.         }  
  15.     }  
  16.     return xmlHttp;  
  17. }  
  18.   
  19. function stateChanged(xmlHttp, contentDivId) {  
  20.     if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {  
  21.         
  22.         document.getElementById(contentDivId).innerHTML = xmlHttp.responseText;  
  23.     }  
  24. }  
  25.   
  26. function getContent(url, cotentdivId) {  
  27.               
  28.             var xmlHttp=null;  
  29.             xmlHttp = GetXmlHttpObject();  
  30.             if (xmlHttp == null) {  
  31.                 alert("can't get ajax object!");  
  32.                 return;  
  33.             }    
  34.     xmlHttp.onreadystatechange = function () {  
  35.         stateChanged(xmlHttp, cotentdivId);  
  36.     };     
  37.     xmlHttp.open("GET", url, true);  
  38.     xmlHttp.send(null);  
  39. }  
function GetXmlHttpObject() {
    var xmlHttp = null;
    try {
  // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
  // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function stateChanged(xmlHttp, contentDivId) {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
      
        document.getElementById(contentDivId).innerHTML = xmlHttp.responseText;
    }
}

function getContent(url, cotentdivId) {
			
		    var xmlHttp=null;
		    xmlHttp = GetXmlHttpObject();
		    if (xmlHttp == null) {
		        alert("can't get ajax object!");
		        return;
		    }  
    xmlHttp.onreadystatechange = function () {
        stateChanged(xmlHttp, cotentdivId);
    };   
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ajax在返回集合后,数据到复杂表格的应用 的相关文章

随机推荐

  • vue虚拟列表实现原理

    vue中实现一个虚拟列表 应用场景 前端的业务开发中会遇到不使用分页方式来加载长列表的需求 如在数据长度大于 1000 条情况 DOM 元素的创建和渲染需要的时间成本很高 完整渲染列表所需要的时间不可接受 同时会存在滚动时卡顿问题 解决该卡
  • iOS14 修改启动视图为全屏模式

    iOS14里面启动一个视图其会默认以非全屏模式打开 有些时候需要全屏展示 该如何修改 修改示例 let secondVC SecondViewController secondVC modalPresentationStyle fullSc
  • linux之安装Apache服务

    1 在镜像中查找web服务 2 安装web服务 3 关闭防火墙和selinux 4 启动服务 5 测试服务 6 配置文件 292行 302行 402行 7 创建文件并进入 8 配置wyg文件 9 重启服务 查看服务
  • 某站弹幕Protobuf协议逆向分析

    一杯敬明天 一杯敬过往 大家好 我是TheWeiJun 时间过得好快 转眼间春节已过 此刻大家都已经开始复工了吧 首先祝大家新年快乐 2023年一路旺旺旺 小编也是心情激动 才有了前面的开场白 直入主题 今天给大家带来某站弹幕protobu
  • tomcat漏洞之任意文件上传(CVE-2017-12615)

    目录 一 漏洞介绍 二 影响版本 三 原理分析 四 环境搭建 五 利用漏洞上传文件 四个方法 1 在文件名后面添加斜杠 来进行绕过 2 在文件名后面添加 20 来进行绕过 3 在文件名后面添加 DATA来进行绕过 4 上传哥斯特生产的jsp
  • IDEA设置控制台字体大小以及换行不换行(美观)

    一 设置控制台大小 1 左上角 File gt Settings 2 找到 Editor gt Color Scheme gt Console Font 勾选Use 就能根据自己设置字体大小了 二 控制台字体换行 1 如下是换行了 打印的结
  • KVM使用入门

    KVM虚拟化 KVM在使用的时候必须是硬件支持虚拟化的 要确保使用的宿主机或实体机支持硬件虚拟化技术 环境搭建 我在VMware里装了个centos7 把centos7当做宿主机使用 关闭selinux vi etc selinux con
  • C#中使用EditorBrowsableAttribute选择“屏蔽”程序集中的方法(实际只是隐藏,仍可以使用方法名调用,只是编辑器如VS中不再智能提示类中有这个方法)

    EditorBrowsableAttribute Class https docs microsoft com zh cn dotnet api system componentmodel editorbrowsableattribute
  • 用go实现cors中间件

    目录 一 概述 二 简单请求和预检请求 简单请求 预检请求 三 使用go的gin框架实现cors配置 1 安装 2 函数 一 概述 CORS Cross Origin Resource Sharing 是一种浏览器安全机制 用于控制在Web
  • ROS通信机制之动作(Action)服务的实践

    1 动作概述 讲完了 服务 之后 接下来就是通信的第三种机制 动作 在上节我们知道服务的应用场景是需要在有限时间内完成 而对于一些比较复杂的任务 需要耗时比较长 甚至是不确定时间的时候 就需要用到动作这种通信方式了 在原理上 动作使用 话题
  • 别不把自己当回事

    人活着要有尊严 哪怕现在的社会有多么的现实 没有尊严的人生是枯燥乏味的 连你自己都不把自己当回事 谁还会把你当回事 路是自己走的 事情是自己做的 不要别人的施舍 也会走到自己的成功 别什么事都依赖别人 别总是想从别人那里得到什么 因为别人的
  • Visio绘图中遇到的一些问题及相应解决方法(持续更新)

    1 为什么按下方向键后 选中的目标没有移动 而绘图界面却在移动 解决方法 检查键盘的SL Scroll Lock 键是否被按下 键盘上对应的指示灯是否被点亮 SL键被激活 按下方向键等同于鼠标拖动绘图区右侧或下方的滚动条 2 Visio在编
  • Lua :操作符很简单,算数、关系、逻辑和其他

    目录 1 算数运算符 2 关系运算符 3 逻辑运算符 4 其他运算符 Lua中操作符可以划分为三种 算数运算符 关系运算符 逻辑运算符和其他运算符 1 算数运算符 算数运算符 加法 减法 乘法 除法 取余 乘幂 负号 do local a
  • 根据字符串,对数据进行排序

    后端返回数据 const data mc 苹果 num 6 mc 香蕉 num 31 mc 樱桃 num 1 mc 橘子 num 22 mc 橙子 num 2 排序 const sortOrder 橙子 樱桃 苹果 香蕉 橘子 data s
  • Python字典的使用

    1 有如下学生的成绩信息 s1 姓名 乔峰 班级 1班 数学 88 语文 87 英语 90 s2 姓名 段誉 班级 2班 数学 98 语文 77 英语 95 s3 姓名 阿朱 班级 1班 数学 78 语文 83 英语 80 s4 姓名 阿紫
  • 二分查找(BinarySearch)

    尽管二分查找的基本思想相对简单 但细节可以令人难以招架 高德纳 文章目录 一 常见问题 整数溢出问题 区间选取问题 二 完整例子 一 常见问题 当年 乔恩 本特利将二分搜索问题布置给专业编程课的学生时 百分之90的学生在花费数小时后还是无法
  • yum install XX 失败: Error Downloading Packages

    yum clean all 清除缓存目录下的软件包及旧的headers yum list 重新列出所有已经安装和可以安装的软件包 然后在执行yum install xx 就行了
  • 关于Springboot引入Jython调用python的一个相对全面的解决方案

    最近在研究Jython调用python 总结一下可行方案 引入jar包
  • 西门子中压交流变频器——GL150介绍分享

    1 西门子中压交流变频器 GL150 GL150 LCI变频器 负载换向逆变器 可以让SINAMICS驱动器系统实现更高额定功率 GL150设计做可变转矩和恒定转矩特性的单电机应用的驱动器变频器 这种变频器有空冷和水冷设计型号 更高额定功率
  • Ajax在返回集合后,数据到复杂表格的应用

    通常 我们无论是用普通Ajax机制还是利用框架 在处理返回的问题上 都会遇到这样的问题 如 我们要将一个List