$ .getJSON回调帮助 - 不是函数

时间:2018-02-15 08:25:52

标签: javascript callback getjson

我的背景如下:

我有一个变量' qq' - 我想从API调用中为此变量分配数据,一旦分配了数据,我就会在绘制/绑定过程中使用这些数据。

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控制台中收到以下错误:

未捕获的TypeError:回调不是函数

我尝试了以下内容 - 这似乎有效:



dataLoader('Prov', function () { alert('I Am Done');});




但它在我的上下文中并不理想,因为我想调用dataLoader(' Prov',XXX())其中XXX()可能是使用qq中新加载的值的许多不同函数

有关我错过船的地方的任何建议吗?

2 个答案:

答案 0 :(得分:1)

变化:

dataLoader('Prov', sayIamDone());

dataLoader('Prov', sayIamDone);

,因为:

sayIamDone是函数,sayIamDone()是函数的结果。通常,sayIamDone()undefinedsayIamDone中的返回值;

想要使用参数吗?你可以这样做:

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);
    };
}

答案 1 :(得分:1)

通过运行dataLoader('Prov', sayIamDone());,您将dataLoader sayIamDone函数的结果传递给dataLoader('Prov', sayIamDone); 。你必须传递而不用括号才能传递函数本身。

buildNodeHierarchy