后台拼接html代码在不同浏览器下显示的问题

         最近在一个项目中需要实现一个功能,把后台拼接好的html代码输出到前台,显示出拼接好的html表格样式。我用的是win7系统IE11运行正常,但是客户使用的是XP系统+IE8以及360浏览器,页面都显示出html源代码,分析后发现问题出在浏览器对AJAX提交后返回值的处理上,IE8直接把<,>显示成转义字符导致问题发生,而IE11原样输出,所以显示是正常的。前台代码如下:

<pre class="javascript" name="code">		new biz.ajaxsubmit({
    		id : "#performancePayForm",
    		url : "<c:url value='/performancePay/uploadFile'/>",
    		dataType : "json",
    		success : function(data, textStatus, jqXHR) {
        		$("#specialGradeItem").html(data);
    		},
    		error : biz.utils.loadError
    	}); 
 

问题就出在返回的data中。开始觉得是jquery的html()方法对IE8以下的版本不支持导致,但是在IE9下运行问题依旧,因此排除jquery的问题。然后又尝试修改dataType返回值的类型为“html”,也不起作用。无奈之下转变思路,把后台拼接html的过程放在前台完成,后台只负责把处理结果转换为json格式输出到前端。后台controller代码如下:

/**
	 * <p>导入excel</p>
	 * @param datafile
	 * @throws IOException
	 */
	public void uploadFile(File datafile,PerformancePay performancePay) throws IOException{
		StringBuilder sb=new StringBuilder();
		List<PerformacePayDetail> performanceDetailList = performancePayService.generateEppdTableContent_1(ExcelUtil.readExcelDate(datafile),performancePay);
		String jxgzStr = PageUtil.toJson4JqGrid(performanceDetailList, true);
		 //绩效综合、上月余额、本月发放、本月余额行 
        double lastMonthBalance = 0.0;
        if(performancePayService.searchLmBalance() != null){
        	lastMonthBalance = ExcelUtil.nullToZero(performancePayService.searchLmBalance().getPpBalance());	//查询上月余额
        }
        String newjxgzStr = ""; 
        newjxgzStr = jxgzStr.substring(0,jxgzStr.length()-1);
        sb.append(",");
        sb.append("\"syye\":\""+lastMonthBalance+"\"}");
		this.print(newjxgzStr + sb.toString()); 
	}


前台拼接html代码的方法如下:

//创建表格
    function createPlanTable(dataList,lmb){
    	var tbody = $("#specialGradeItem");
    	var gdjxgz = 0;
    	tbody.html("");
    	$.each(dataList,function(i,eppd){
			var tr=$("<tr></tr>");
			var td=$("<td align='center'>"+(i+1)+"</td>");	//序号
			var td2=$("<td>"+eppd.ppdEpNo+"</td>");	//工号
			var td3=$("<td>"+eppd.ppdEpName+"</td>");	//姓名
			var td4=$("<td>"+eppd.ppdPostName+"</td> ");	//岗位
			var td5=$("<td align='center'>"+eppd.ppdFactor+"</td>");	//系数
			var td6=$("<td align='center'>"+eppd.ppdJxDf+"</td>");	//绩效得分
			var td7=$("<td align='center'>"+eppd.ppdJxgz+"</td>");	//5%绩效工资
			var td8=$("<td align='center'></td>");	//一次分配绩效工资
			var td9=$("<td align='center'><input name='text2' type='text' id='duixiang' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='' size='15' /></td>");	//加减项1
			var td10=$("<td align='center'><input name='text2' type='text' id='duixiang' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='' size='15' /></td>");	//加减项2
			var td11=$("<td align='center'><input name='text2' type='text' id='duixiang' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='' size='15' /></td></td>");	//加减项3
			var td12=$("<td align='center'><input name='text2' type='text' id='duixiang' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='' size='15' /></td></td>");	//加减项4
			var td13=$("<td align='center'><input name='text2' type='text' id='duixiang' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='' size='15' /></td></td>");	//加减项5
			var td14=$("<td align='center'></td>");	//最终绩效
			var td15=$("<td><textarea id='biaozhun' name='textarea2' cols='30' rows='2' onpropertychange=\"if(value.length>50) value=value.substr(0,50)\">"+eppd.ppddemo16+"</textarea></td> ");	//备注
			gdjxgz += eppd.ppdJxgz;	//5%绩效工资合计
			
			tr.append(td);
			tr.append(td2);
			tr.append(td3);
			tr.append(td4);
			tr.append(td5);
			tr.append(td6);
			tr.append(td7);
			tr.append(td8);
			tr.append(td9);
			tr.append(td10);
			tr.append(td11);
			tr.append(td12);
			tr.append(td13);
			tr.append(td14);
			tr.append(td15);
			tbody.append(tr);
		})
		
		//合计行
		var tr_1=$("<tr></tr>");
    	var td_1=$("<td colspan='6' align='center'><font style='font-weight:bold'>合计</font></td>");
    	var td_2=$("<td align='center'><input name='jjze' id='jjze' size='15' onKeyUp=\"if(isNaN(value)) execCommand('undo')\" value='"+gdjxgz+"'/></td>");
    	var td_3=$("<td align='center'></td>");
    	var td_4=$("<td colspan='5' align='center'><font style='font-weight:bold'>最终绩效工资合计</font></td>");
    	var td_5=$("<td></td>");
    	var td_6=$("<td></td>");
    	tr_1.append(td_1);
    	tr_1.append(td_2);
    	tr_1.append(td_3);
    	tr_1.append(td_4);
    	tr_1.append(td_5);
    	tr_1.append(td_6);
    	tbody.append(tr_1);

    	var tr_2=$("<tr class='lc2' bgcolor='ccdef4'>");
    	var td_11=$("<td>上月余额</td>");
    	var td_12=$("<td align='center'>"+lmb+"</td>");
    	var td_13=$("<td>本月绩效总额</td>");
    	var td_14=$("<td align='center'></td>");
    	var td_15=$("<td>本月可支配</td>");
    	var td_16=$("<td align='center'></td>");
    	var td_17=$("<td>本月余额</td>");
    	var td_18=$("<td align='center'></td>");
    	var td_19=$("<td colspan='7'></td>");
    	tr_2.append(td_11);
    	tr_2.append(td_12);
    	tr_2.append(td_13);
    	tr_2.append(td_14);
    	tr_2.append(td_15);
    	tr_2.append(td_16);
    	tr_2.append(td_17);
    	tr_2.append(td_18);
    	tr_2.append(td_19);
    	tbody.append(tr_2);
    }


IE8及360下运行结果如图:

 

      通过对这个问题的解决,避免后台拼接html代码输出到前台的做法,这样很可能遇到浏览器版本不同,运行结果出现异常的问题。最保险的做法就是在前台通过循环返回的json数据的方式,一行行把html代码拼接好,里面需要从后台查询显示的数据都放在json串中的某个属性里,使用很方便。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值