setInterval找不到功能?

时间:2012-04-19 05:37:18

标签: javascript jquery ajax joomla mootools

我愚弄了这个脚本,所以它不是那么笨重,但它的要点是我每秒都得到一个参考错误,我没有函数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文件中就好了,所以我不确定什么可能是错的:/

2 个答案:

答案 0 :(得分:6)

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

setInterval(getList, 1000);

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

setInterval(function() {
    getList(whatever, ...);
    // you can have more code here and even access local variables
}, 1000);

答案 1 :(得分:3)

setInterval(getList, 1000);

setInterval(以及setTimeout)需要对函数的引用。 Passing the function as strings have the same risk as using eval

  

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