栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

DataTables-启动一个新的Ajax请求

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DataTables-启动一个新的Ajax请求

如果您使用的是DataTable默认提供的搜索字段,则需要使用

searchDelay
选项。默认情况下,使用服务器端处理时,它设置为400ms。但是,您有
"searching":false
,因此您不能在用例中使用此选项。

您提供自己的自定义

input
元素以执行搜索。这是对DataTables的完全有效的使用。
但是,您应该做的是在创建请求后不要中止请求,而是首先要防止创建无关的请求。
您应该做的是
myTable.draw()
取消对的呼叫。在下面的示例中,我使用的是Lodash的
debounce
。如果需要,可以使用另一个库中的实现。在以下示例中,我还修改了事件处理,以检查两次击键之间输入字段的值是否实际发生了变化。您正在检查选项卡,但这只是冰山一角。使用箭头键也会生成
keyup
事件。只要按下并释放Shift键,事件就会产生一个
keyup
。下面的代码通过检查自上次笔触以来该字段的值是否已更改来处理所有这些情况,如果没有更改,则忽略该事件。

我输入的速度足够快,如果在下面示例中显示的字段中输入“ I’m a little teapot”,我在控制台上只能看到一次“ drawing”。

// We create a new function that will debounce calls to the draw() function.var debouncedDraw = _.debounce(function() {  // myTable.draw();  console.log("drawing");}, 500);var prev_value = undefined;function processPrimarySearch() {  var obj = $(this),    search_id = obj.attr('id'), // e.g. #field1    search_value = obj.val(); // e.g. '123-456'  // There's been no change to the field, ignore.  if (prev_value === search_value) {    return;  }  prev_value = search_value;    if (search_value.length >= 3 || (!search_value)) {    debouncedDraw();  }}$('#primarySearch input[type="text"]').on("keyup", processPrimarySearch);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div id="primarySearch">  <input type="text"></div>

您在注释中询问是否应保留当DataTables启动新查询时中止由DataTables启动的任何先前Ajax查询的代码。我将其删除。我从未在我的应用程序中依赖过此类代码。(您提到了我的问题。是的,我确实在给出的答案中使用了代码,但这是拆卸的代码,它是测试套件的一部分,而不是应用程序代码。)从理论上讲,这似乎是一件好事。毕竟,新查询使旧查询过时了,那么为什么不放弃旧查询并保存一些工作呢?对?实际上,收益将是适度的,因为:

  1. 以人类与GUI交互的速度,

    abort()
    很有可能在发出呼叫时,Ajax请求将已经在网络上发出。(实际上,我进行了一些手动测试,确实,我的速度还不够快,无法阻止浏览器发送请求。)因此,即使您中止请求,服务器也将收到请求。

  2. 此外,

    abort()
    这并不意味着通知服务器该请求已被取消。因此,您将不会在服务器上保存工作。(在页面上搜索“服务器”将使您直接在人们谈论服务器是否被通知的问题以及如果您需要通知服务器已取消请求的情况下该怎么做。)

您可能节省了一些重绘时间,但这并不是我真正要担心的问题。

另一方面,中止这样的请求 可能会导致其他问题。
为了查看会发生什么,我修改了我的一个应用程序以中止旧的请求,然后整个程序立即被炸毁。中止的请求与我的设置方式搭配不好

DataTables
。我不知道到底是什么引起了问题。也许我只是在使用正确的设置来使其蓬勃发展。或者我使用的插件不喜欢中止的请求。无论如何,中止请求都可能导致问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409889.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号