Javascript数组变量的行为不相同

Javascript array variables not behave equally

本文关键字:数组 变量 Javascript      更新时间:2024-04-03

Javascript代码将XML本地文件读取到数组变量arrTst中。它在Firefox 25.0.1中工作,我可以在调试器中看到arrTst值。我在处理这个arrTst时遇到问题。示例是显示警报。

如果我交换警报行(首先显示arrTest),则不会显示警报。

有人能解释为什么交换线路时不显示警报吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<inData>
    <record>
        <date>2012-08-01</date>
        <amount>7</amount>
    </record>
    <record>
        <date>2012-08-02</date>
        <amount>22</amount>
    </record>
</inData>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<script type="text/javascript" src="jquery-1.10.2.js"> </script>
<title>test read XML file</title>
</head>
<body>
<h1 >Test XML</h1>
<div id="TstMsgArea"></div>
<script type="text/javascript">
var str1="";
var arrTst=[];
var arrCon=[["2013-08-01", 1], ["2013-08-02",33]];
$(document).ready(function(){ 
 /*******************************************************************
 * read xml file from local filesystem & push to array
 *******************************************************************/ 
     $.get("test.xml",{},function(xml){
        $('record',xml).each(function(i) {
            _date = $(this).find("date").text();                
            _amount = parseInt($(this).find("amount").text());
            var X0=[];
            X0.push(_date);
            X0.push(_amount);
            arrTst.push(X0);
            alert (str1);
            str1+=_date +", "+_amount+"; ";
            $("#TstMsgArea").append(str1);
        });
    }); 
/*******************************************************************
 * check array values - if lines swapped no go !
 *******************************************************************/ 
    alert ("arrConst : " + arrCon[0][0]+", " + arrCon[0][1]+";    " + arrCon[1][0]+", " + arrCon[1][1]); 
    alert ("arrTest : " + arrTst[0][0]+", " + arrTst[0][1]+"; " + arrTst[1][0]+", " + arrTst[1][1]);
});  //$(document).ready
</script>
</body>
</html>

您的警报放错了地方。您需要将它们放在成功函数中,或者放在该函数内从调用的另一个函数中。

此外,您不应该在success函数之外声明str1arrTst。这些是你在函数内部建立的值,在函数之外是不可用的

如果你想在代码的其他地方使用这些变量,你需要把使用它们的代码放在函数的某个地方。从$.get()成功函数内部调用该函数,并将变量作为参数传递给它。然后你就可以确定数据已经准备好了。

var arrCon=[["2013-08-01", 1], ["2013-08-02",33]];
$(document).ready(function(){ 
 /*******************************************************************
 * read xml file from local filesystem & push to array
 *******************************************************************/ 
     $.get("test.xml",{},function(xml){
        var str1="";
        var arrTst=[];
        $('record',xml).each(function(i) {
            _date = $(this).find("date").text();                
            _amount = parseInt($(this).find("amount").text());
            var X0=[];
            X0.push(_date);
            X0.push(_amount);
            arrTst.push(X0);
            alert (str1);
            str1+=_date +", "+_amount+"; ";
            $("#TstMsgArea").append(str1);
        });
        alert ("arrConst : " + arrCon[0][0]+", " + arrCon[0][1]+";    " + arrCon[1][0]+", " + arrCon[1][1]); 
        alert ("arrTest : " + arrTst[0][0]+", " + arrTst[0][1]+"; " + arrTst[1][0]+", " + arrTst[1][1]);
    });
});  //$(document).ready