我认为这不一定是间隔错误,但这就是正在发生的事情。
基本上,我为网站的这一部分构建了自己的“谷歌搜索”功能。它将列出一堆票证类型的项目,搜索功能允许他们像在Google中一样搜索票证。在您键入时,它会填充您正在进行的搜索。
因此,interval事件持续运行并调用一个AJAX函数(显然调用一个运行我编码的方法的.jsp文件,根据输入的文本搜索数据库)然后将返回的数据拆分并粘贴到网页,你知道,标准的AJAX东西。
但是,当我尝试点击其中一个链接时,它似乎忽略它就像我必须在特定时间点击它才能让页面注册点击。我可以减慢间隔,它可以缓解一些问题但是搜索似乎慢。并且它偶尔会忽略点击次数。链接是表元素内的标准链接。
AJAX函数 - 我在发回之前格式化了数据(我更喜欢Java编码到JavaScript,所以我在那里做了而不是XD)
间隔设置为500MS。所以它一次性替换文本而不是逐行替换。所以idk为什么这样做:/我在使用连续间隔的其他页面上没有这个问题。但是,该页面没有AJAX调用。
function getResults(supplier, request, cat, type, displayFiles, input)
{
var output;
//Ajax variable
var xmlhttp;
//Makes the call to the ajax engine based on browser
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var url = "getResults.jsp?supplier=" + encodeURIComponent(supplier) + "&request= " + encodeURIComponent(request) + "&cat= " + encodeURIComponent(cat) + "&type= " + encodeURIComponent(type)
+ "&displayFiles= " + encodeURIComponent(displayFiles) + "&input= " + encodeURIComponent(input);
xmlhttp.open("POST",url,true);
//Handling of the ajax call
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
output = xmlhttp.responseText;
//alert(output); //Gives the success or failure of the ajax call
document.getElementById("resultsBox").innerHTML = output;
}
}
xmlhttp.send(null);
}
答案 0 :(得分:0)
所以你有一个由setInterval创建的计时器,它每隔(至少)500ms触发一次搜索方法。
搜索方法是Async,因此您甚至可以在旧搜索请求完成之前触发新的搜索请求,这可以创建一系列对innerHTML属性的更新(取决于服务器的响应时间)。因为即使每隔500毫秒发出一次请求,您也不知道响应何时到达。
作为建议,尝试重做逻辑,用setTimeout(甚至requestAnimationFrame)替换setInterval,以避免"溢出"行为,而不是更新整个结果块只是新的。
答案 1 :(得分:0)
你可以像我为游戏那样做。
search() {
do stuff
setTimeout(search,500);
}
这就是我在javascript中进行连续循环的方法。这样它只是一个循环。 setTimeout只运行一次它的功能。 setInterval每隔一段时间运行它,它很容易被粗心大意。使用setTimeout,你可以让search()函数在完成时再次调用它。