私のサイトには、うまく機能する ajax 検索機能があります。ただし、高速なタイパーが原因で、未使用の httpResquests が発生する可能性があることがわかりました。そこで、タイマーを追加して検索を遅くしたいと思います。
最初に頭に浮かんだのは setTimeout でしたが、機能していません。最初は機能しているように見えますが(検索を一時停止します)、結果が表示された後、キーが2番目に上がると通常の結果表示に戻ります。なんらかの理由で機能していないことに気付いた後、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");
}
};
}