0

我简化了这个脚本,所以它不是那么笨重,但它的要点是我每秒钟都会收到一个引用错误,因为我没有函数 getList()。我试图在它的上方和下方移动 setInverval() ,但它几乎什么也没做。它告诉我一个匿名函数正在调用 getList 并且它没有被定义。

如果它有所作为,我必须添加 jquery 冲突,以便它不会干扰 mootools 并且我正在运行 joomla 1.5

jQuery(document).ready(function($) {
function getList(){
i=0;
$.getJSON(
    "./test.php",
    function(data) 
    {   
        while(data.streams[i]){
            channel[i] = data.streams[i];
            stats[i] = data.status[i];
            title[i] = data.title[i];
            viewers[i] = data.viewers[i];
            i++;
        }
    }
  );
}
setInterval("getList()", 1000);
});

我尝试通过控制台调试它,但我在控制台调试方面还是新手,所以它并没有让我走得太远。这个程序单独工作,没有 joomla 和 jquery 没有冲突的东西,它在 HTML 文件中很好,所以我不确定什么可能是错误的:/

4

2 回答 2

6

当使用setInterval()(通过传递字符串)的 eval 样式版本时,函数必须是全局的。无论如何,这都是一件坏事,所以请改为:

setInterval(getList, 1000);

所以你永远不会再传递一个字符串,如果你需要参数,这样做:

setInterval(function() {
    getList(whatever, ...);
    // you can have more code here and even access local variables
}, 1000);
于 2012-04-19T05:39:16.817 回答
3
setInterval(getList, 1000);

setInterval(以及setTimeout)需要对函数的引用。将函数作为字符串传递与使用相同的风险eval

将字符串而不是函数传递给 setTimeout() 会遇到与使用 eval 相同的危险。字符串文字在全局上下文中进行评估,因此当字符串被评估为代码时,调用 setTimeout() 的上下文中的局部符号将不可用。

于 2012-04-19T05:37:40.733 回答