我的网站上有一个 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");
}
};
}