Javascript 变量问题:未捕获类型错误:无法读取属性';推动';未定义的

Javascript 变量问题:未捕获类型错误:无法读取属性';推动';未定义的,javascript,undefined,typeerror,Javascript,Undefined,Typeerror,此代码始终提供“未捕获类型错误”:无法读取未定义错误的“推送”属性。 我很确定问题在于代码中的顺序。但经过多次测试后,我无法正确理解这一点 我已经阅读了所有已经放置的“UncaughtTypeError”:无法读取stackoverflow上未定义的“post”的“push”属性,但没有一个解决了我的问题 var fixedTriangles = []; function loadClaims(loadingDoneCallback){ // should be replaced by

此代码始终提供“未捕获类型错误”:无法读取未定义错误的“推送”属性。 我很确定问题在于代码中的顺序。但经过多次测试后,我无法正确理解这一点

我已经阅读了所有已经放置的“UncaughtTypeError”:无法读取stackoverflow上未定义的“post”的“push”属性,但没有一个解决了我的问题

var fixedTriangles = [];

function loadClaims(loadingDoneCallback){
    // should be replaced by data from the DB.
    // fixedTriangles = [0,1,2,3,4,5];
    // TEST data from db
    request.onreadystatechange = function() {
    // parse the request and put the triangles in de array
    fixedTrianglesStr = request.response;
    // string min last comma
    fixedTriangles = fixedTrianglesStr.replace(/,\s*$/, "");
    document.getElementById("dbArray").innerHTML = "dbArray: " + fixedTriangles; 
    //// result = 0,1,2,3,4,5,6,7,8
    console.log("fixedTriangles TEST: " + fixedTriangles); 
    //// result = 0,1,2,3,4,5,6,7,8

    // for development only
    showClaimedData();
};
// only lauch callback when data is loaded.
loadingDoneCallback();
}
var request = new XMLHttpRequest();
request.open("GET", "http://www.example.com/db.php", true);
request.send();


//// To be clear, I left out the rest of the code. 
//// ...


function onFormSubmit(){
    console.log("close");

    var dataNode = document.getElementById("coordinates");
    var data = dataNode.textContent;
    var dataSplit = data.split("/");
    var fixedTriangles;
    // MAKE IT FIXED
    var returnTriangle = new THREE.Vector3(parseInt(dataSplit[0]),parseInt(dataSplit[1]),parseInt(dataSplit[2]));
    // TEST fixedTriangles: undefined WHY?
    document.getElementById("test").innerHTML = "fixedTriangles TEST: " + fixedTriangles; 
    //// result = undefined

    fixedTriangles.push(parseInt(returnTriangle.x)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    fixedTriangles.push(parseInt(returnTriangle.y)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    fixedTriangles.push(parseInt(returnTriangle.z)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    setAlphaOnTriangle(returnTriangle, 255);

    // save data here.

    showClaimedData();

    var formElement = document.getElementById("form");
    formElement.style.display = "none";
}

//// To be clear, I left out the rest of the code. 
//// ...

////是关于结果和错误的重要评论,可供查看

发送表单时,必须发送“fixedTriangles”的值,但我得到的却是以下错误:“UncaughtTypeError:无法读取属性“push”或“undefined”

我已经测试了很多可能的错误,我在其他帖子中读到过这些错误:“uncaughttypeerror:cannotreadproperty'push'或undefined”

这段大代码的其余部分可以正常工作


可能是序列问题吗?我已经通过将XMLHttpRequest放在顶部和底部进行了测试

在控制台中执行了另一项测试:

这一行:

document.getElementById(“测试”).innerHTML=“fixedTriangles测试:”+fixedTriangles

给出:

fixedTriangles测试:
2固定三角形测试:0,1,2,3,4,5,6,7,8


那么,第一次尝试是空的,接下来两次给出结果

在您的
onFormSubmit
中,您通过执行
var fixedTriangles来覆盖全局
fixedTriangles
当您尝试推送它时,您会得到错误,因为它不再是一个数组。

在您的
onFormSubmit
中,您通过执行
var fixedTriangles来覆盖全局
fixedTriangles
您首先将
fixedTriangles
定义为数组,但之后定义为var,因此它被覆盖。

您首先将
fixedTriangles
定义为数组,然后定义为var,因此它被覆盖。

尝试:

function onFormSubmit(){
    console.log("close");

    var dataNode = document.getElementById("coordinates");
    var data = dataNode.textContent;
    var dataSplit = data.split("/");
    if(!fixedTriangles)
        var fixedTriangles = [];
    // MAKE IT FIXED
    var returnTriangle = new THREE.Vector3(parseInt(dataSplit[0]),parseInt(dataSplit[1]),parseInt(dataSplit[2]));
    // TEST fixedTriangles: undefined WHY?
    document.getElementById("test").innerHTML = "fixedTriangles TEST: " + fixedTriangles; 
    //// result = undefined

    fixedTriangles.push(parseInt(returnTriangle.x)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    fixedTriangles.push(parseInt(returnTriangle.y)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    fixedTriangles.push(parseInt(returnTriangle.z)); 
    //// Uncaught TypeError: Cannot read property 'push' of undefined
    setAlphaOnTriangle(returnTriangle, 255);

    // save data here.

    showClaimedData();

    var formElement = document.getElementById("form");
    formElement.style.display = "none";
}
尝试:



看起来你从来没有调用过我在代码中所做的
loadClaims
,我把代码拿出来澄清一下。请参阅:///为了清楚起见,我省略了代码的其余部分。
var fixedTriangles
fixedTriangles
的值设置为未定义,并将其删除,但同样的错误?看起来您从未调用我在已删除的代码中执行的
loadClaims
。请参阅:///为了清楚起见,我省略了代码的其余部分。
var-fixedTriangles
fixedTriangles
的值设置为未定义,并将其删除,但还是相同的错误?谢谢,但是
var-fixedTriangles我把它放在那里进行测试,取出它并不能修复它。您还通过
fixedTriangles=fixedTrianglesStr.replace(/,\s*$/,”)覆盖
loadClaims
中的
fixedTriangles
。也在这里:
document.getElementById(“test”).innerHTML=“fixedTriangles测试:”+fixedTriangles
您正在使用
fixedTriangles
作为字符串,但它应该是一个数组。我建议您避免使用全局变量,然后到处重写它们。
fixedTriangles=fixedTrianglesStr.replace(/,\s*$/,“”)
我需要去掉最后一个逗号,并执行document.getElementById(“test”).innerHTML=“fixedTriangles test:”+fixedTriangles重写变量?它仅用于测试。
fixedTrianglesStr.replace(/,\s*$/,“”)
将返回一个字符串,然后将该字符串分配给
fixedTriangles
变量,该变量应该是一个数组。所以我必须将其变回数组,并使其如下所示?
///string min last comma fixedTrianglesArr=fixedTrianglesStr.replace(/,\s*$/,“”);///字符串到数组fixedTriangles=fixedtrianglers.split(“,”)谢谢,但是
变量固定三角我把它放在那里进行测试,取出它并不能修复它。您还通过
fixedTriangles=fixedTrianglesStr.replace(/,\s*$/,”)覆盖
loadClaims
中的
fixedTriangles
。也在这里:
document.getElementById(“test”).innerHTML=“fixedTriangles测试:”+fixedTriangles
您正在使用
fixedTriangles
作为字符串,但它应该是一个数组。我建议您避免使用全局变量,然后到处重写它们。
fixedTriangles=fixedTrianglesStr.replace(/,\s*$/,“”)
我需要去掉最后一个逗号,并执行document.getElementById(“test”).innerHTML=“fixedTriangles test:”+fixedTriangles重写变量?它仅用于测试。
fixedTrianglesStr.replace(/,\s*$/,“”)
将返回一个字符串,然后将该字符串分配给
fixedTriangles
变量,该变量应该是一个数组。所以我必须将其变回数组,并使其如下所示?
///string min last comma fixedTrianglesArr=fixedTrianglesStr.replace(/,\s*$/,“”);///字符串到数组fixedTriangles=fixedtrianglers.split(“,”)谢谢,但
var fixedTriangles=[]
变量固定三角错误保持不变?谢谢,但
var fixedTriangles=[]
变量固定三角错误保持不变?谢谢,这样可以去掉错误,但数组是空的?因此,没有“推送”任何内容。您可能也在其他地方重写该变量,您是否可以编辑该示例,或者使用整个代码创建一个外部示例?这可能是序列问题吗?我已经通过将XMLHttpRequest放在顶部和底部进行了测试?在控制台中完成了另一个测试:此行:
document.getElementById(“测试”).innerHTML=“fixedTriangles测试:”+fixedTriangles给出:
fixedTriangles测试:
然后
2个fixedTriangles测试:0,1,2,3,4,5,6,7,8
因此,第一次尝试为空,接下来两次为空