当前位置: 首页 > 面试题库 >

如何停止DataTables实例已启动的所有当前正在进行的Ajax查询?

经兴安
2023-03-14
问题内容

简要描述;简介

将测试服务器重置为已知状态会导致我的测试失败,因为重置服务器时DataTables实例启动的Ajax请求正在进行中。我想通过在重置服务器之前停止DataTables请求来防止这种情况。

详细说明

我有一个在某些页面上使用DataTables的应用程序。这些数据表均执行服务器端查询以填充其表。

当我执行系统测试时,有时会发生争用情况:

  1. 测试运行程序启动测试服务器。

  2. 测试运行程序在测试浏览器中加载页面,该页面上有DataTable实例。

  3. 测试运行程序运行测试,执行测试并结束。

  4. 测试运行程序将测试服务器重置为下一个测试的已知状态。

  5. 页面上会显示一条警报,提示DataTables遇到Ajax错误。警报说:

DataTables警告:表ID =
[某些ID]-Ajax错误。有关此错误的更多信息,请参见http://datatables.net/tn/7

  1. 我的测试系统不希望收到警报,但是即使测试实际上是成功的,也很混乱并记录了一个失败。(或者在某些情况下,它会崩溃。)

我知道发生这种情况是因为服务器突然中断了Ajax请求。 我正在寻找的是一种首先防止警报出现的方法。我想 重置服务器 之前
停止所有正在进行的DataTables请求。

解决方案已被拒绝

  • 告诉DataTables实例不要使用警报:如果DataTables实例遇到与重置测试服务器无关的问题,我希望测试彻底失败。

  • 修改测试服务器:我宁愿保持服务器简单,也不必担心 那里的 请求可能无法得到答复。

  • 等待客户端所有请求结束:这可能会大大降低测试速度,尤其是当数十次测试重复此等待时。

  • 将测试浏览器定向到没有DataTables的新页面,因为这会中断当前请求:这又会损害测试性能


问题答案:

测试完成所有检查后,请驱动浏览器的软件在浏览器中执行以下代码。(这将以某种“拆卸”代码在测试后运行)。

if (typeof $ !== "undefined" && $.fn.dataTable) {
    var all_settings = $($.fn.dataTable.tables()).DataTable().settings();
    for (var i = 0, settings; (settings = all_settings[i]); ++i) {
        if (settings.jqXHR)
            settings.jqXHR.abort();
    }
}

说明

即使在未加载jQuery或未加载DataTable的页面上执行时,代码也可以正常工作。因此,它首先检查它们是否已加载,如果未加载,则不执行任何操作。然后,它获取所有DataTable实例的设置对象。在每个设置对象中,它都会检查是否存在jqXHRjqXHR当发出Ajax请求时,将使用jQuery
对象填充。它将abort()在其上调用方法,从而中止请求。

无论表使用1.10 API还是1.9 API,以上代码均适用于DataTables
1.10。但是,请注意,该jqXHR字段正式不是公共API的一部分。同时,其中一位开发人员在DataTables论坛上毫无保留地谈论了这一点,因此这可能并不是私有API所依赖的最危险的部分。而且,仅依赖于公共API的解决方案会麻烦得多,因为必须修改所有DataTable实例以跟踪标记Ajax事务开始和结束的事件或自定义Ajax处理程序等的事件。不仅要针对要测试的项目使用适当的代码,而且还要提供提供恰好使用DataTables的HTML小部件的任何第三方库。

请注意,上面的代码不会 阻止 DataTables实例启动 请求。但这不是我所关心的。



 类似资料:
  • 问题内容: 我有一个多线程的Java项目,我想添加一个方法stop()来停止所有正在运行的线程。问题在于该项目是由其他人开发的,而我不熟悉它如何实现多个线程。 我知道的是,一旦项目开始,就会调用许多线程,并且它们将永远运行。有没有办法找到所有正在运行的线程并停止它们?我进行了很多搜索,找到了如何获取正在运行的线程的列表: 接下来要停止所有正在运行的线程该怎么办? 我想停止这些线程的原因是,我需要将

  • 我之所以要停止这些线程,是因为我需要将这个项目作为一个捆绑包部署到OSGi容器中。一旦包启动,多个线程将永远运行。因此,我需要实现一个destroy()方法来停止所有线程,以控制包的生命周期。 怎么样

  • 问题内容: 我从Linux Shell 连接到。我时不时地运行一个太大的查询。它可以打印,我已经知道这不是我的意思。我想停止查询。 击中(几次)会完全杀死并把我带回外壳,因此我必须重新连接。 是否可以在不杀死自己的情况下停止查询? 问题答案:

  • 问题内容: 如何以编程方式停止正在运行的mysql查询? 我面临的问题是查询是使用用户提供的数据构造的,并且偶尔可能需要很长时间才能执行(大型表15-3000万行)。我想为用户提供一个cancel- option,但不知道如何停止当前正在执行的mysql-query。 该应用程序是Java applet- servlet:用户在applet中指定条件,该条件将传递给servlet,在servlet

  • 我有一个片段,它使用ListView显示多达数百个项目的列表。当用户对列表进行长时间滚动,并且在列表运行时按下后退键时,就会发生不好的事情(列表适配器的getView()中的空指针崩溃)。到目前为止,我找到了以下解决方法: 实现这一点的诀窍是让适配器使用源项列表的克隆: 否则,调用mAdapter。clear()将清除源项列表,因此当在方向更改时重新创建片段时,列表上将不会显示任何项。然而,克隆如

  • 本文向大家介绍C#实现进程管理的启动和停止实例,包括了C#实现进程管理的启动和停止实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现进程管理的启动和停止方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。