$.getJSON 回调帮助 - 不是函数
$.getJSON Callback Help - Not a Function
我的上下文如下:
我有一个变量 'qq' - 我想通过 API 调用将数据分配给这个变量,一旦分配了数据,我就在 [=47] 中使用这个数据=] 进程.
API 调用和分配给 var 'qq' 工作正常 - 但我似乎无法让我的回调工作 - 我不断收到错误:callback() 不是函数
这是我的代码目前的样子:
var qq = [];
// binding function - to be run after data loader has completed
function sayIamDone() {
alert('I Am Done');
// do data bindings with qq
}
// load data from api into var qq
function dataLoader(inp,callback) {
let url = 'http://localhost:65232/api/layercolor/' + inp;
console.log(url);
$.getJSON(url,function(result) {
qq = eval('({' + result + '})');
//console.log(qq);
callback();
});
}
// call data loader
dataLoader('Prov', sayIamDone());
根据上面的内容,我的 chrome 控制台出现以下错误:
未捕获类型错误:回调不是函数
我尝试了以下方法 - 似乎有效:
dataLoader('Prov', function () { alert('I Am Done');});
但这在我的上下文中并不理想,因为我想调用 dataLoader('Prov',XXX()) 其中 XXX() 可能是使用 qq[ 中新加载的值的许多不同函数=12=]
有什么关于我错过船的地方的建议吗?
变化:
dataLoader('Prov', sayIamDone());
到
dataLoader('Prov', sayIamDone);
因为:
sayIamDone
是函数,sayIamDone()
是function.Normally的结果,sayIamDone()
是undefined
或return中的值sayIamDone
;
想使用参数吗?你可以这样做:
dataLoader('Prov', callFunc(n));
function callFunc(arg) {
return function() {
sayIamDone(arg);
};
}
或更多参数?您可以通过 spread
dataLoader('Prov', callFunc(n));
function callFunc(...arg) {
return function() {
sayIamDone.apply(null, arg);
};
}
通过 运行 dataLoader('Prov', sayIamDone());
您将传递给 dataLoader
sayIamDone
函数的 结果 。你必须传递它 不带 括号才能传递函数本身。
dataLoader('Prov', sayIamDone);
我的上下文如下:
我有一个变量 'qq' - 我想通过 API 调用将数据分配给这个变量,一旦分配了数据,我就在 [=47] 中使用这个数据=] 进程.
API 调用和分配给 var 'qq' 工作正常 - 但我似乎无法让我的回调工作 - 我不断收到错误:callback() 不是函数
这是我的代码目前的样子:
var qq = [];
// binding function - to be run after data loader has completed
function sayIamDone() {
alert('I Am Done');
// do data bindings with qq
}
// load data from api into var qq
function dataLoader(inp,callback) {
let url = 'http://localhost:65232/api/layercolor/' + inp;
console.log(url);
$.getJSON(url,function(result) {
qq = eval('({' + result + '})');
//console.log(qq);
callback();
});
}
// call data loader
dataLoader('Prov', sayIamDone());
根据上面的内容,我的 chrome 控制台出现以下错误:
未捕获类型错误:回调不是函数
我尝试了以下方法 - 似乎有效:
dataLoader('Prov', function () { alert('I Am Done');});
但这在我的上下文中并不理想,因为我想调用 dataLoader('Prov',XXX()) 其中 XXX() 可能是使用 qq[ 中新加载的值的许多不同函数=12=]
有什么关于我错过船的地方的建议吗?
变化:
dataLoader('Prov', sayIamDone());
到
dataLoader('Prov', sayIamDone);
因为:
sayIamDone
是函数,sayIamDone()
是function.Normally的结果,sayIamDone()
是undefined
或return中的值sayIamDone
;
想使用参数吗?你可以这样做:
dataLoader('Prov', callFunc(n));
function callFunc(arg) {
return function() {
sayIamDone(arg);
};
}
或更多参数?您可以通过 spread
dataLoader('Prov', callFunc(n));
function callFunc(...arg) {
return function() {
sayIamDone.apply(null, arg);
};
}
通过 运行 dataLoader('Prov', sayIamDone());
您将传递给 dataLoader
sayIamDone
函数的 结果 。你必须传递它 不带 括号才能传递函数本身。
dataLoader('Prov', sayIamDone);