JQuery Datatable Ajax请求两次问题的解决

原创 2013年12月02日 23:28:37

最近一个项目中使用JQuery Datatable,用起来比较方便,但在测试过程中,发现当条件改变时,有时查询结果中的数据不正确。

使用FireBug跟踪时,发现在使用Ajax请求时,点击一次搜索按钮,却发送了两次请求,一次是原条件的请求,一次是新的请求。

下面是查询按钮的代码。先判断是否是Datatable,如果是的话,先Destroy掉,再重新创建。

function search(data) {
	var $searchResult = $("#search-result .result-panel");
	
     if (resultDataTable) {
    	resultDataTable.fnClearTable();
    	$searchResult.dataTable().fnDestroy();
    	$("#resultList").empty();
    }  else {
    	$searchResult.show();
    }
    resultDataTable = $searchResult.dataTable({
		"bPaginate" : true,
		"bAutoWidth" : false,
		"bProcessing": true,
		"bFilter": false,
		"bJQueryUI": true,     
		"sPaginationType": "full_numbers",
        "oLanguage": {                          //汉化
            "sLengthMenu": "每页显示 _MENU_ 条记录",
            "sZeroRecords": "没有检索到数据",
            "sInfo": "当前数据为从第 _START_ 到第 _END_ 条数据;总共有 _TOTAL_ 条记录",
            "sInfoEmtpy": "没有数据",
            "sProcessing": "正在加载数据...",
            "oPaginate": {
                "sFirst": "首页",
                "sPrevious": "前页",
                "sNext": "后页",
                "sLast": "尾页"
            }
        }, 
        "bServerSide": true,
        "sServerMethod": "POST",
        "sAjaxSource": "${baseUrl}/zpzxResumeSearch.do?&method=<bean:message key='zjzxResume.button.search' />",
        //"fnServerData": executeQuery,
        "fnServerParams": function (aoData) {
            aoData.push({"name": "conds", "value": data});
        },
        "aoColumns": [
            { "mData": null },
            { "mData": "name" },
            { "mData": "sex" },
            { "mData": "birthday" },
            { "mData": "mobilePhone" },
            { "mData": "diploma" },
            { "mData": "workYears" },
            { "mData": "currentAddress" },
            { "mData": "hukouAddress" },
            { "mData": "updateTime" },
            { "mData": null }
        ],
        "aoColumnDefs": [
             {
	            "aTargets": [ 1 ],
	            "mRender": function ( data, type, full ) {
		        	    return "<a target='_blank' onmouseover='showLabels(this, event);' onmouseout='hiddenLabels(this, event);' labels='"+buildResumeLabels(full)+"'  href='${baseUrl}/zpzxResumeLookResult.do?resumeId="
		        	    		+full.resumeId+"&zpzxTalentId="
		        	    		+full.zpzxTalentId+"&method=<bean:message key='zjzxResume.button.showDetailInfo' />'>"
		        	    		+ data + "</a>";	        
	            }
          },
          {
        	  "aTargets": [ 0 ],
        	  "mRender": function ( data, type, full ) {
	        	    return "<input type='checkbox' value='"+full.resumeId+"' class='chkExportResume' />";
        	  }
          },
          {        	 
        	  "aTargets": [ 10 ],
        	  "mRender": function ( data, type, full ) {
	        	    return buildLink(data, type, full);
        	  }
          }
        ]
    });
跟踪Datatable后发现,在执行
resultDataTable.fnClearTable();
方法时,实际调用了一次fnDraw方法,该方法会调用Ajax请求,然后在DataTable的_fnInitialise方法中会再调用一次Ajax请求。

查看Datatable发现fnClearTable方法实际上还有一个布尔值参数来控制是否执行fnDraw方法,即只要把该语句修改为

resultDataTable.fnClearTable(false);
一切就OK了。

调查该问题Google了很久,最后还是通过看源码解决。不过,由此也看到Datatable作者在写此插件时,使用了很多优秀的编程方法,使得此插件很容易使用和扩展。感谢他们的贡献!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用jquery DataTable和ajax向页面显示数据列表

首先在html页面定义好相关长度的行和列,假设table的id=data-table“” 使用jquery DataTable在js中这么写 $(function() { $('#data-ta...

jQuery datatable1.10.5 api

  • 2015-03-22 22:15
  • 1.50MB
  • 下载

jquery datatable 参数

DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内)。 先把它主页...

jquery datatable api chm 中文

  • 2015-09-16 19:03
  • 81KB
  • 下载

利用ligerUI实现类似数据列表过滤展示,类似JQuery datatable和某些框架的dataGrid

1. 利用的是ligerui的框架,本篇文章使用的ligui版本是LigerUIV1.3.3 , 网址  www.ligerui.com 2. 如下图展示 3.代码如下 3.1 先导入cs...

jQuery Datatable 实用简单实例

目标: 使用jQuery Datatable构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求。同时,jQuery Datatable强大的功能支持:排序,分页,搜索等。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)