Javascript 处理多个Ajax请求:ClearTimeout

Javascript 处理多个Ajax请求:ClearTimeout,javascript,ajax,Javascript,Ajax,我有来自MySQL请求的元素。 它们都有唯一的id,也作为参数插入onclick调用函数中 每次单击都会导致将数据搜索到数据库中。这将一直执行,直到数据库发送了预期的答案。当预期答案出现时,函数需要停止 我不知道如何知道,当预期数据到达时,如何停止此功能。 我无法将var x设置为其他值,并且var x未定义 函数搜索(id){ document.getElementById(id).style.color=“红色”; var x=setInterval(函数(){answer(id)},10

我有来自MySQL请求的元素。
它们都有唯一的
id
,也作为参数插入onclick调用函数中

每次单击都会导致将数据搜索到数据库中。这将一直执行,直到数据库发送了预期的答案。当预期答案出现时,函数需要停止

我不知道如何知道,当预期数据到达时,如何停止此功能。
我无法将
var x
设置为其他值,并且
var x未定义

函数搜索(id){
document.getElementById(id).style.color=“红色”;
var x=setInterval(函数(){answer(id)},1000);
}
功能应答(id){
document.getElementById(“结果”).innerHTML=id;
/*
AJAX请求,查找anwser
若有(答复)
{
clearTimeout(x);//未定义变量x
}
*/
}

点击
点击

您正在函数内声明X,无法在函数外访问它

试着这样做:

var x;//这里有一个全局变量
功能搜索(id){
document.getElementById(id).style.color=“红色”;
return setInterval(函数(){answer(id)},1000);//返回时间间隔id
}
功能应答(id){
document.getElementById(“结果”).innerHTML=id;
清除超时(x);
/*
AJAX请求,查找anwser
若有(答复)
{
clearTimeout(x);//未定义变量x
}
*/
}

点击
点击

创建间隔对象

var intervals = {};
function search(id) {
    document.getElementById(id).style.color = "red";
    intervals[id] = setInterval(function () {answer(id)}, 1000);
}

function answer(id) {
    document.getElementById("result").innerHTML = id;
    /*
    AJAX request, looks for an anwser

     if(isAnswered)
     {
         clearTimeout(intervals[id]);
     }

    */
}
function search(id) {
    document.getElementById(id).style.color = "red";
    answer(id);
}

function answer(id) {
    document.getElementById("result").innerHTML = id;
    /*
    AJAX request, looks for an anwser

     if(!isAnswered)
     {
         window.setTimeout( function () { answer(id); }, 1000);
     }

    */
}

最好使用setTimeout,而不用担心时间间隔

var intervals = {};
function search(id) {
    document.getElementById(id).style.color = "red";
    intervals[id] = setInterval(function () {answer(id)}, 1000);
}

function answer(id) {
    document.getElementById("result").innerHTML = id;
    /*
    AJAX request, looks for an anwser

     if(isAnswered)
     {
         clearTimeout(intervals[id]);
     }

    */
}
function search(id) {
    document.getElementById(id).style.color = "red";
    answer(id);
}

function answer(id) {
    document.getElementById("result").innerHTML = id;
    /*
    AJAX request, looks for an anwser

     if(!isAnswered)
     {
         window.setTimeout( function () { answer(id); }, 1000);
     }

    */
}

你刚刚创建了一个新的bug,当他们点击两个divs时,把它放在一个全局文件中,他们都覆盖了。你的第一个答案成功了,谢谢!但我需要看看是否每秒都有新的数据。为什么要编辑?“但我需要看看是否每秒都有新的数据。为什么”啊?你在说什么…你的第一个答案成功了,谢谢!但我需要看看是否每秒都有新的数据。为什么要编辑?