setTimeout无法正常使用jQuery和load()

时间:2011-03-08 21:20:23

标签: php javascript jquery html ajax

我的代码有问题我将2个表加载到两个div中,如下所示:

loadTable($("#vbeTable"),'getUpdateA')
loadTable($("#vbcTable"),'getUpdateB')

我也有:

$("#vbeTable, #vbcTable").live('mouseover mouseout', function(event) {
    if (event.type == 'mouseover') {
//        console.log('hovering over',$(this));
        $(this).attr('update',false)
    } else {
//        console.log('NOT hovering over',$(this));
        $(this).attr('update',true)
    }
})

和loadTable函数是这样的:

function loadTable($table, $php, $noRefresh){
    if($table.attr('update') == 'false'){
        console.log('not updating', $table, $table.attr('update'))
        setTimeout( function () { loadTable($table, $php); }, 1000)
    }
    $table.load($php+'.php',function(response, status, xhr) {
        if (status == "success") {
            if(!$noRefresh){
                console.log('acquired table')
                setTimeout( function () { loadTable($table, $php); }, 1000)
            }
        }
        else {
            console.log('error aquiring lock on', $table.attr('id'), response, status, xhr)
        }
    });

}

*由于某种原因,setTimeout函数没有等待适当的时间,而在控制台中我得到:

  

(96)liveLoads.js:35获取表
  (7711)liveLoads.js:29不更新[<div id=​"vbcTable" update=​"true">​…​</div>] false
  (2)<exception> <exception> <exception> <exception> *      或者,vbe和vbc都是空div。

能帮助我帮助我吗?

*的 更新 *

我也有这段代码:

function expand(EntID) {
    console.log('expand',EntID)
    $.ajax({
        url: "showRows.php?ID=" + EntID
    });
}

当点击表格中的某个内容时,它会调用此函数。

然后其他函数setTimeouts进入了一个tizzy并连续调用了一百万次而没有注意时间

2 个答案:

答案 0 :(得分:3)

您正在调用超时回调函数,而不是将其传递给超时。

而不是:

// this will call loadTable right away and setTimeout will trigger the returned value in a sec.
setTimeout( loadTable($table, $php), 1000)

执行:

// setTimeout will trigger the anon. function in a sec
setTimeout( function () { loadTable($table, $php); }, 1000)

您还在loadTable中调用相同的函数loadTable。而且我在这无尽的循环中没有看到休息。

答案 1 :(得分:0)

这部分看起来不对:

if (status == "success") {
    if(!$noRefresh){
        console.log('acquired table')
        setTimeout( loadTable($table, $php), 1000)
    }
}

除了事实上这没有将正确的类型传递给setTimeout(param1必须是一个函数,你给它返回函数调用loadTable的结果) - 我认为你不希望它调用loadTable无论如何。而是调用一个解析数据并填充html元素的函数!所以:

if (status == "success") {
    if(!$noRefresh){
        console.log('acquired table')
        setTimeout(function () {drawMyTableWithThisData(someTable, data);}, 1000);
    }
}