javascript - 在javascript中将数据添加到本地数组

标签 javascript arrays

一段时间以来,我一直在尝试将数据添加到我的数组中,但它不起作用。我有以下代码:

function OBJMesh(file)
{
    this.modelVertex = [];
    this.modelColor = [];
    var that = this;
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function ()
    {

        if(rawFile.readyState == 4)
        {
            if(rawFile.status === 200 || rawFile.status === 0)
            {
                var allText = rawFile.responseText;
                var lines = allText.split("\n");


                for(var i = 0; i < lines.length; i ++)
                {
                    var lineData = lines[i];
                    var lineString = lineData.split(" ");

                    if(lineString[0] === "v")
                    {

                        var x = parseFloat(lineString[1]);
                        var y = parseFloat(lineString[2]);
                        var z = parseFloat(lineString[3]);

                        /*
                        this.modelVertex.push(x);
                        this.modelVertex.push(y);
                        this.modelVertex.push(z);

                        this.modelColor.push(0.0);
                        this.modelColor.push(0.0);
                        this.modelColor.push(0.0);
                        this.modelColor.push(1.0);
                        */

                        that.modelVertex.push(10.0);

                        //document.getElementById("textSection").innerHTML = "testing";
                    }

                }
            }
        }
    }

    rawFile.send();

}

OBJMesh.prototype.getModelVertex = function ()
{
    return this.modelVertex;
};

OBJMesh.prototype.getModelColor = function ()
{
    return this.modelColor;
};

如果我注释掉 this.modelVertex.push(10.0); 它会通过错误并打印出“testing”。但是如果我取消注释它,它就会卡在那里并且不会打印出任何东西。为什么要这样做?我该如何解决它,以便它实际上将给定数据推送到 this.modelVertex 数组?

非常感谢

编辑:在 dystroy 告诉我该做什么之后我编辑了我的代码,当我尝试打印 OBJMesh 构造函数(如上所示)中的值时它确实有效,但是当我尝试通过在我的main 函数(如下所示)它不打印任何内容。

var cubeModel;

function main()
{
    cubeModel = new OBJMesh("file:///Users/Danny/Desktop/3DHTMLGame%202/cube.obj");

    document.getElementById("textSection").innerHTML = cubeModel.getModelVertex();
}

最佳答案

this 不是回调中 OBJMesh 的新实例,而是 XMLHttpRequest

首先在定义回调之前引用所需的对象:

var that = this;
rawFile.onreadystatechange = function ()

然后使用它:

that.modelVertex.push(10.0);

在您的编辑中回答问题:

您的构造函数包含一个异步请求。这意味着您的阵列不是立即可用,而是稍后可用。

一个解决方案是将回调传递给构造函数:

function OBJMesh(file, doAfterInit) {
    this.modelVertex = [];
    this.modelColor = [];
    var that = this;
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function () {
        if(rawFile.readyState == 4)
        {
            if(rawFile.status === 200 || rawFile.status === 0)
            {
                var allText = rawFile.responseText;
                var lines = allText.split("\n");
               for(var i = 0; i < lines.length; i ++)
                {
                    var lineData = lines[i];
                    var lineString = lineData.split(" ");
                    if(lineString[0] === "v"){
                        that.modelVertex.push(10.0);
                        if (doAfterInit) doAfterInit();
                    }
                }
            }
        }
    }
    rawFile.send();
}

...


cubeModel = new OBJMesh("file:///Users/Danny/Desktop/3DHTMLGame%202/cube.obj", function() {
    document.getElementById("textSection").innerHTML = cubeModel.getModelVertex();
});

但是在这里上课看起来不是个好主意。

关于javascript - 在javascript中将数据添加到本地数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484121/

相关文章:

javascript - XML 阅读器不工作

java - 如何将此 for 循环转换为 while 循环?

arrays - 按多个字段对数组进行排序

javascript - 如何检查字符串是否在数组中?

javascript - 数组拼接删除数组中的所有元素

javascript - 在移动时删除 anchor ?

javascript - 在 jquery 中向下滚动页面时隐藏内容

php - 通过ajax发送数组到javascript

Javascript读取本地文件适用于Windows但不适用于Linux

c - c语言排序数组错误