javascript - 使用将内容推送到数组中的函数后,数组的内容消失了
问题描述
我正在尝试使用将内容从 xml 推送到数组中的函数,我检查了它,我在函数中看到了数组的内容,但是在函数数组的内容消失之后,为什么?范围的问题?我该如何解决?谢谢!
Javascript:
<script>
var words = [];
/*var words = [
{suomen:"puhua", englanti:"to talk", answer:false},
{suomen:"lukea", englanti:"to read", answer:false},
{suomen:"kirjoittaa", englanti:"to write", answer:false}
];
*/
loadDoc();
alert("The array hasn't content: " + words.toString());
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "catalog.xml", true);
xhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("WORD");
for (i = 0; i <x.length; i++) {
var en = String(x[i].getElementsByTagName("ENGLISH")[0].childNodes[0].nodeValue);
var fi = String(x[i].getElementsByTagName("FINNISH")[0].childNodes[0].nodeValue);
words.push({suomen:fi, englanti:en, answer:false});
}
alert("The array has content: " + words.toString());
}
</script>
xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<WORD>
<FINNISH>puhua</FINNISH>
<ENGLISH>to talk</ENGLISH>
</WORD>
<WORD>
<FINNISH>lukea</FINNISH>
<ENGLISH>to read</ENGLISH>
</WORD>
<WORD>
<FINNISH>kirjoittaa</FINNISH>
<ENGLISH>to write</ENGLISH>
</WORD>
</CATALOG>
解决方案
如果您的问题是WHY
,那么这里有一个答案:当来自 ajax 请求的响应到来时,异步调用 myFunction() 函数。所以当你打电话loadDoc();
和打电话后alert("The array hasn't content: " + words.toString());
- 单词将是空的,因为loadDoc()
需要一些时间将数据放在那里。如果您对如何处理感兴趣 - 阅读有关异步 JS 的更多信息:https ://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous
如何修复:如果您需要快速修复 - 只需使用最后需要的words
代码myFunction()
:
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("WORD");
for (i = 0; i <x.length; i++) {
var en = String(x[i].getElementsByTagName("ENGLISH")[0].childNodes[0].nodeValue);
var fi = String(x[i].getElementsByTagName("FINNISH")[0].childNodes[0].nodeValue);
words.push({suomen:fi, englanti:en, answer:false});
}
call_this_function_to_handle_words_array(words)
}
推荐阅读
- batch-file - 批处理 - 如何将文件类型 A 的文件从路径 A 的子文件夹 A 复制到路径 B 的子文件夹 A?
- python - 转换日期时间格式得到了这个问题 'str' object has no attribute 'strftime' in DRF
- c# - Signalr 客户端没有收到集线器消息?
- python - 如何修复 IndexError:Python 中的列表索引超出范围?
- c++ - dll的Objdump demangle样式
- reactjs - React Router 6 和 Typescript - 为什么它不通过 props 传递组件?
- python - 通过 python 和 pandas 获取特定的属性名称及其从 xml 到 csv 的值
- php - 如何将关联的对象数组序列化为 JSON 对象?
- dax - 使用 Excel Powerpivot 数据模型根据多个表中的多个条件对变量求和
- python - folium中的缩放线权重(折线或蚂蚁路径)