我正在尝试将一个函数传递给另一个函数,以便我可以在ajax调用完成时调用它,但是我得到一个错误,说我要调用的函数不是函数。
File1(首先加载)
function functionOne() {
//Some Code
}
File2(已加载第二个并包含ajax调用)
function functionTwo(functionOne) {
functionOne();
}
functionTwo();
我收到了TypeError: functionOne is not a function
我的问题有两个:
functionOne
超出了第二个函数的范围?答案 0 :(得分:2)
在functionTwo
中,当您将其声明为参数时,您会隐藏functionOne
:functionTwo
中的代码只能看到这个新变量,而不是具有相同名称的全局变量。
但是你的方法是错误的,它不会确保你正在寻找的执行顺序。
jQuery的ajax
函数返回promise,这是一种处理异步函数的方法,并且在ajax调用完成后执行某些函数。
如果您希望functionTwo
启动ajax调用然后调用functionOne,您可以这样做:
function functionOne() {
}
function functionTwo() {
return $.ajax({ // don't forget the return
// many parameters here
}).then(function(data){
// use the data here
});
}
functionTwo().then(functionOne);
这确保仅在functionOne
中启动的ajax调用完成后才调用functionTwo
。
如果你想使用老式的方式并将函数作为参数传递,可以这样做:
function functionOne() {
}
function functionTwo(callback) {
$.ajax({
// many parameters here
}).then(function(data){
// use the data here
}).then(callback);
}
functionTwo(functionOne);
但是2015年,您最好开始考虑延期和承诺;)