热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决BootstrapDataTableAjax请求重复问题

在最近的一个项目中,我们使用了JQueryDataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。

在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。

下面是查询按钮的代码。首先检查是否已经存在DataTable,如果存在,则先销毁再重新创建。

  1. function search(data) {
  2. var $searchResult = $("#search-result .result-panel");
  3. if (resultDataTable) {
  4. resultDataTable.fnClearTable(false);
  5. $searchResult.dataTable().fnDestroy();
  6. $("#resultList").empty();
  7. } else {
  8. $searchResult.show();
  9. }
  10. resultDataTable = $searchResult.dataTable({
  11. "bPaginate": true,
  12. "bAutoWidth": false,
  13. "bProcessing": true,
  14. "bFilter": false,
  15. "bJQueryUI": true,
  16. "sPaginationType": "full_numbers",
  17. "oLanguage": { //汉化
  18. "sLengthMenu": "每页显示 _MENU_ 条记录",
  19. "sZeroRecords": "没有检索到数据",
  20. "sInfo": "当前数据为从第 _START_ 到第 _END_ 条数据;总共有 _TOTAL_ 条记录",
  21. "sInfoEmpty": "没有数据",
  22. "sProcessing": "正在加载数据...",
  23. "oPaginate": {
  24. "sFirst": "首页",
  25. "sPrevious": "前页",
  26. "sNext": "后页",
  27. "sLast": "尾页"
  28. }
  29. },
  30. "bServerSide": true,
  31. "sServerMethod": "POST",
  32. "sAjaxSource": "${baseUrl}/zpzxResumeSearch.do?&method=",
  33. "fnServerParams": function(aoData) {
  34. aoData.push({"name": "conds", "value": data});
  35. },
  36. "aoColumns": [
  37. { "mData": null },
  38. { "mData": "name" },
  39. { "mData": "sex" },
  40. { "mData": "birthday" },
  41. { "mData": "mobilePhone" },
  42. { "mData": "diploma" },
  43. { "mData": "workYears" },
  44. { "mData": "currentAddress" },
  45. { "mData": "hukouAddress" },
  46. { "mData": "updateTime" },
  47. { "mData": null }
  48. ],
  49. "aoColumnDefs": [
  50. {
  51. "aTargets": [ 1 ],
  52. "mRender": function(data, type, full) {
  53. return "'>" + data + "";
  54. }
  55. },
  56. {
  57. "aTargets": [ 0 ],
  58. "mRender": function(data, type, full) {
  59. return "";
  60. }
  61. },
  62. {
  63. "aTargets": [ 10 ],
  64. "mRender": function(data, type, full) {
  65. return buildLink(data, type, full);
  66. }
  67. }
  68. ]
  69. }

通过跟踪Datatable的源码发现,在执行

  1. resultDataTable.fnClearTable();

方法时,实际调用了一次fnDraw方法,该方法会触发Ajax请求。而在DataTable的_fnInitialise方法中也会再调用一次Ajax请求。

查看Datatable的文档发现,fnClearTable方法实际上有一个布尔值参数来控制是否执行fnDraw方法。因此,只需将该语句修改为

  1. resultDataTable.fnClearTable(false);

即可解决问题。

经过长时间的调查和调试,最终通过阅读源码解决了这个问题。在这个过程中,我们也看到了Datatable作者在编写此插件时采用了许多优秀的编程方法,使得此插件不仅功能强大,而且易于使用和扩展。感谢他们的贡献!


推荐阅读
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • .NET Core 托管服务优化与实践
    在.NET Core应用中,托管服务的形式主要分为进程内托管(InProcess)和进程外托管(OutOfProcess)。这两种托管方式各有优缺点,本文将深入探讨它们的特点,并结合实际案例,介绍如何根据具体需求选择合适的托管模式,以实现性能优化和资源利用的最大化。此外,文章还将分享一些实用的配置技巧和最佳实践,帮助开发者提升应用的稳定性和可维护性。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
author-avatar
alilx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有