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