使用setTimeout减慢AJAX函数的速度
Slow down AJAX function with setTimeout
我在我的网站上有一个ajax搜索功能,工作得很好!然而,我看到它可能会由于快速的类型而导致未使用的httpResquests。所以我想添加一个计时器来减慢搜索速度。
首先想到的是setTimeout,但它不起作用。它似乎工作(暂停搜索)第一次左右,但结果显示后,然后它只是有点回到正常显示结果第二我的关键是起来。所以在我注意到它不工作之后,不管什么原因,我转向stackoverflow,发现了这个和这个,但它们基本上和我做的完全一样。
我认为它可能与AJAX的异步方式有关,也许该方法在setTimeout中调用,然后时间实际上是起来的,但这没有多大意义。所以说实话,我不知道发生了什么,如果有任何见解,我将不胜感激。哦,我使用我自己的API,我相信只要扫一眼方法名,你就会知道它们到底是做什么的。
function validateNetworkInput()
{
var query, timer = null;
query = getValue("searchNetworkInput");
if(query.length > 0)
{
clearTimeout(timer);
show("searchNetworkWrapper");
timer = setTimeout(function(){searchNetworks(query);}, 3000);
}
else
{
clearTimeout(timer);
hide("searchNetworkWrapper");
}
}
…
function searchNetworks(query)
{
var ajaxObject, params, path;
ajaxObject = getAjaxObject();
params = "?q=" + query;
path = getInternalPath() + "searchNetworks" + params;
ajaxObject.open("GET", path, true);
ajaxObject.send();
ajaxObject.onreadystatechange = function()
{
if(ajaxObject.readyState == 4 && ajaxObject.status == 200)
{
setInnerHtml("searchNetworkWrapper", ajaxObject.responseText);
}
else if (ajaxObject.readyState == 4 && ajaxObject.status != 200)
{
getErrorReport("Error Searching Networks", "search our database for the network you are looking for");
}
};
}
您的问题是timer
是您的函数的本地,因此下次调用时它不会记住旧计时器。您需要一个在函数调用之间保持不变的变量。像这样的代码应该可以工作:
var validateNetworkInput = (function() {
var timer;
return function() {
var query = getValue("searchNetworkInput");
clearTimeout(timer);
if(query.length > 0) {
show("searchNetworkWrapper");
timer = setTimeout(function(){searchNetworks(query);}, 3000);
} else {
hide("searchNetworkWrapper");
}
})();
相关文章:
- 在固定间隔内调用 AJAX 函数是否会减慢应用程序的速度
- 鼠标速度 JavaScript 函数
- jQuery 事件回调速度:匿名与命名函数
- 在函数中做未使用的参数会减慢 JavaScript 的执行速度
- 我可以减慢这个Javascript函数的速度吗?
- JS计数器:在一个函数中设置不同的速度(间隔)
- 将对象传递到同一作用域内的函数的速度较慢
- jQuery:当重复调用时,重绘函数的速度非常慢
- 为什么加载 JavaScript 函数的工作速度比预期的慢
- Javascript函数可以降低滚动速度
- 如何比较两个Javascript函数的速度
- 包含函数的对象文字表示法的执行速度是否比(全局范围)普通函数(取消引用)更快
- 如何使setTimout函数以相同的速度运行
- 循环中的异步函数运行速度太慢.我该如何提高表现
- 当我使用setInterval函数时,画布中的对象会以指数级的速度增长
- 一个函数JQuery的速度不同
- 我将所有内容保存在外部.js文件中.但并不是所有的函数都在每个页面上使用.这会影响速度吗?
- Javascript中记忆fibonacci函数的奇怪速度结果
- 如何减慢jquery单击函数的执行速度?
- 如何降低执行函数的速度