首页 > 解决方案 > 使用将内容推送到数组中的函数后,数组的内容消失了

问题描述

我正在尝试使用将内容从 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>

标签: javascripthtmlarraysxml

解决方案


如果您的问题是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)
}

推荐阅读