我有一个功能
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(...)
,但它没有工作
答案 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理解为“数字化”,因此会出现“数字不是函数”的错误。
如果你正确地传递了回调函数对象,另一种可能性是你没有定义你传入的函数。如果在回调函数之前没有定义回调函数,就会发生这种情况。它,或者如果没有正确定义你的回调函数。