将回调函数传递给另一个函数

时间:2014-05-21 16:45:16

标签: javascript callback

以下是我正在处理的一些javascript的简化版本:

function freshRooms (callWhenDone) {
var RoomRequest = new XMLHttpRequest();
RoomRequest.open ("GET", "/myAjaxURL", true);
RoomRequest.onreadystatechange = function() {
    if (RoomRequest.readyState === 4 && RoomRequest.status === 200) {

        callWhenDone ();
    }
}
RoomRequest.send();
}

var woopy = 0;
function showwoop() {
    console.log("woopy=" + woopy++);
}

/* refresh - Called on a timer every four seconds */
function refresh () {
    freshRooms(showwoop);
}

TimerFunc = setInterval(refresh, 4000);

我想要的是能够将函数传递给freshRooms,因此当它收到对其ajax请求的响应时,它将执行适合各种不同情况的不同函数。在这个例子中,我只是向它传递一个简单的函数,它向控制台输出一个计数器。

当我在Chrome中执行此代码时,我得到"类型错误:undefined不是函数"在包含callWhenDone();

的行上

但是尽管出现了这个错误,Chrome仍会继续执行该功能,我会看到计数器每4秒钟在控制台中递增一次,正如我所料。

当我在Firefox中执行此代码时,我得到" callWhenDone不是函数",然后函数永远不会执行。

我不明白这个问题。据我了解,freshRooms中的匿名函数应该知道freshRooms定义的所有变量。我在做一些内在错误的事吗?有没有更好的方法来完成我想要做的事情?

1 个答案:

答案 0 :(得分:0)

这个小提琴对你有用吗? http://jsfiddle.net/napple/4GDQe/(我刚刚在document.write旁添加了console.log。)它适用于我当前版本的FF和Chrome。

当您简化上面发布的代码时,问题是否已被消除?如果是这样,我们可能需要查看实际代码。