Javascript数组变量的行为不一样
Javascript代码将XML本地文件读入数组变量arrTst。它在Firefox25.0.1中工作,我可以在调试器中看到arrTst值。我在使用此arrTst时遇到问题。例如显示警报 如果交换警报行(首先显示arrTest),则不会显示警报 有人能解释为什么换行时不显示警报吗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
<?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()
。现在仔细查看日志消息的显示顺序。您将看到您正试图在数据准备就绪之前访问它。