$ .getJSON回调函数未定义

时间:2018-08-19 09:59:54

标签: javascript jquery

我正在尝试从json文件中获取数据以渲染tilemap。但是我一直Uncaught ReferenceError: renderTileMap is not defined遇到此错误。

我试图将renderTileMap函数的主体放入$ .getJSON函数中,并且可以正常工作。地图在0.2毫秒内呈现,因此不再等待。 JSON文件也正确。我不知道为什么javascript无法看到此方法。

getData() {
    $.getJSON(this.file, renderTileMap);
}

renderTileMap(json) {
    var actPosX = this.beginPosX;
    var actPosY = this.beginPosY;
    var activeTile = 0;

    var tiles = json.tiles;
    var tilesResources = json.tilesResources;
    var lines = tiles.length / this.lineSize;
    var i, y;
    for(i = 1; i < lines; i++) {
        for(y = 1; y < this.lineSize; y++) {
            ctx.fillStyle = tilesResources[tiles[activeTile]];
            ctx.fillRect(actPosX,actPosY, this.tileWidth, this.tileHeight);
            actPosX += this.tileWidth;
            activeTile++;
        }
        actPosY += this.tileHeight;
        actPosX = this.beginPosX;
    }
}

1 个答案:

答案 0 :(得分:2)

filerenderTileMap都不是getData方法的变量,它们都是getData(位于其中的对象)的上下文的一部分。您可以通过this访问上下文,因此必须为:

   $.getJSON(this.file, this.renderTileMap);

现在,在立即调用回调函数的同时,它会释放其上下文,因此您必须绑定它:

  $.getJSON(this.file, this.renderTileMap.bind(this));

继续阅读:

How to access the correct `this` inside a callback?

MDN - this