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

本文介绍了一种简化Ajax返回处理的方法,通过将复杂的表格拼接任务交由后台完成,减轻前端负担。利用Ajax发送请求后,后台返回填充好的表格HTML代码,前端只需将其插入指定区域即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常, 我们无论是用普通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.      }  

 (这是最初的做法,很头疼的,也很麻烦,因为这里的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. }  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值