Javascript调用传递句柄的函数

时间:2014-03-03 16:30:30

标签: javascript ajax

我有一个功能

function myFun(myPageErrorCallback){
$.ajax({
    type : 'GET',       
    url : someurl,      
    async : true,       
    success : function(data){
                     //display data
              },
    error : function(xhr, textStatus, errorThrown) {
            if (some condition) {
                  perform default error handling;
            } 
            myPageErrorCallback(xhr, textStatus, errorThrown);

    }
});

}

来电时,

 myPageErrorCallback(xhr, textStatus, errorThrown);

我收到错误myPageErrorCallback未定义。

我尝试了myPageErrorCallback.call(...),但它没有工作

1 个答案:

答案 0 :(得分:0)

如果没有看到你的回调函数,或者你如何将它传递给myFun的语法,或者抛出特定的错误,很难知道这个过程的哪个部分正在破坏。

由于错误是您的函数“myPageErrorCallback”未定义,我们知道没有任何内容传递给myFun函数的myPageErrorCallback参数,或者传入的内容被破坏。

当你调用myFun()并将你的回调函数传递给它时,你可能调用该函数而不是传递它。

myFun(callback()) //invoking
myFun(callback) //passing

当您调用callback()作为myFun()的参数(而不是传递它)时,callback()会在myFun()callback()的返回值之前运行被传递给myFun()而不是函数对象本身。使用myFun(callback)传递函数对象本身,而不是其调用的返回值。举例说明:

function sumNumbers(a,b){
    return a + b;
}

function multiplyNumbers(a,b){
    return a * b;
}

function performCalculation(a, b, calcFunction){
    return calcFunction(a,b);
}

performCalculation(2, 4, sumNumbers); //=> 6

performCalculation(2, 4, multiplyNumbers); //=> 8

performCalculation(2, 4, sumNumbers()) //=> TypeError: number is not a function 

在最后一个示例中,立即调用sumNumbers()。其参数未定义,因此执行a + b会生成NaN(全局对象的“非数字”属性)。然后,在performCalculation中,调用NaN(a,b)。 javascript(或者至少是V8引擎)奇怪地将NaN理解为“数字化”,因此会出现“数字不是函数”的错误。

如果你正确地传递了回调函数对象,另一种可能性是你没有定义你传入的函数。如果在回调函数之前没有定义回调函数,就会发生这种情况。它,或者如果没有正确定义你的回调函数。