Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组变量的行为不一样_Javascript_Xml - Fatal编程技术网

Javascript数组变量的行为不一样

Javascript数组变量的行为不一样,javascript,xml,Javascript,Xml,Javascript代码将XML本地文件读入数组变量arrTst。它在Firefox25.0.1中工作,我可以在调试器中看到arrTst值。我在使用此arrTst时遇到问题。例如显示警报 如果交换警报行(首先显示arrTest),则不会显示警报 有人能解释为什么换行时不显示警报吗 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <inData> <record> <d

Javascript代码将XML本地文件读入数组变量arrTst。它在Firefox25.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>

2012-08-01
7.
2012-08-02
22
测试读取XML文件
测试XML
var str1=“”;
var arrTst=[];
var arrCon=[“2013-08-01”,1],“2013-08-02”,33];
$(文档).ready(函数(){
/*******************************************************************
*从本地文件系统读取xml文件并推送到阵列
*******************************************************************/ 
$.get(“test.xml”,{},函数(xml){
$('record',xml)。每个(函数(i){
_date=$(this.find(“date”).text();
_amount=parseInt($(this.find(“amount”).text());
var X0=[];
X0.推送(推送日期);
X0.推送(推送量);
arrTst.push(X0);
警报(str1);
str1+=_日期+”,“+_金额+”;
$(“#TstMsgArea”)。追加(str1);
});
}); 
/*******************************************************************
*检查数组值-如果交换了行,则不执行!
*******************************************************************/ 
警报(“arrcons:“+arrCon[0][0]+”,“+arrCon[0][1]+”;“+arrCon[1][0]+”,“+arrCon[1][1]);
警报(“arrTest:“+arrTst[0][0]+”,“+arrTst[0][1]+”;“+arrTst[1][0]+”,“+arrTst[1][1]);
});  //$(文件)。准备好了吗

您的警报位于错误的位置。您需要将它们放在success函数中,或者放在从该函数中调用的另一个函数中

另外,您不应该在success函数之外声明
str1
arrTst
。这些是您在该函数内部构建的值,在该函数外部将不可用

如果您想在代码中的其他地方使用这些变量,您需要将使用它们的代码放在函数中的某个地方。从
$.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

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

另外,您不应该在success函数之外声明
str1
arrTst
。这些是您在该函数内部构建的值,在该函数外部将不可用

如果您想在代码中的其他地方使用这些变量,您需要将使用它们的代码放在函数中的某个地方。从
$.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

关键是我需要这个数组在success函数之外。我在Debuger中也看到了预期的价值,在成功函数之外。我怎么能做到这一点呢?请仔细阅读JavaScript异步调用。您遇到的问题是,您试图在数据准备就绪之前使用它。在代码中放入一些
console.log()
调用,包括在success函数内部和代码末尾的警报位置。同时删除所有警报并将其更改为
console.log()
。现在仔细查看日志消息的显示顺序。您将看到您正在尝试在数据准备就绪之前访问它。重点是我需要在成功函数之外使用此数组。我在Debuger中也看到了预期的价值,在成功函数之外。我怎么能做到这一点呢?请仔细阅读JavaScript异步调用。您遇到的问题是,您试图在数据准备就绪之前使用它。在代码中放入一些
console.log()
调用,包括在success函数内部和代码末尾的警报位置。同时删除所有警报并将其更改为
console.log()
。现在仔细查看日志消息的显示顺序。您将看到您正试图在数据准备就绪之前访问它。