datagrid页面请求两次问题分析

以下是html代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
<script type="text/javascript" src="ui/jquery.min.js"></script>
<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
<script type="text/javascript" src="js/report.js"></script>

</head>
<body>
<form id="searchForm">
	开始日期:<input name="startDate" class="easyui-datebox">
	截止日期:<input name="endDate" class="easyui-datebox">
	<button id="btnSearch">查询</button>
</form>

<div style="height:2px;" ></div>
<table id="grid"></table>
</body>
</html>

以下是report.js代码:

$(function(){
	//加载表格数据
	$('#grid').datagrid({
		url:'report_ordersReport',
		columns:[[
			{field:'name',title:'商品类型',width:100},
			{field:'y',title:'销售额',width:100}
		]],
		singleSelect: true,
	});

	//点击查询按钮
	$('#btnSearch').bind('click',function(){
		//把表单数据转换成json对象
		var formData = $('#searchForm').serializeJSON();
		//alert(JSON.stringify(formData));
		if(formData.endDate){//有输入就是true
			formData.endDate+=" 23:59:59";
		}
		$('#grid').datagrid('load',formData);
	});
});

请求页面:

后台代码:


	/**
	 * 销售统计报表
	 * @return
	 */
	public void ordersReport() {
		System.out.println(startDate+"----"+endDate);
		List list = reportBiz.ordersReport(startDate,endDate);
		write(JSON.toJSONString(list));
	}
	

后台输出: 可以看出前台发送一次请求.

查询出结果,然后输入条件,点击查询。

前端执行到:

即将加载datagrid:

然后执行一段jQuery代码:

此时还没有 发送请求:

 

继续执行:

随即突然执行到:加载datagrid的部分:

 

页面此时也被刷新:

此时发起了查询后的第一次请求:时间非空

接着因为加载datagrid导致又发起了第二次请求:

这样第二次请求的结果覆盖了第一次请求的结果,因而导致问题。

开始以为是easyui的datagrid的问题,可是之前也这样使用过,没有出现任何问题,始终不懂是什么原因导致第二次请求的出现。

分析第二次请求出现的原因

1.图片加载

2.datagrid:在html里引用了一次,在js里又加载了一次

3.datagrid的源码setTimeout导致的问题

最终,经过排除才发现上面的问题都不是本问题出现的原因。

原因竟然是form表单提交导致的第二次请求:

对比上面鸿恩寺部分与之前错误的代码,发现是button没有定义type=“button”,且放在了form里,这样点击button相当于提交了form的数据,于是在button的点击事件执行完毕以后,又发起了一次提交表单的页面请求。我也是醉了……,仔细啊仔细。

猜你喜欢

转载自blog.csdn.net/cl723401/article/details/87967371
今日推荐