как выполняется код, обрабатывающий объект XMLHttpRequest - PullRequest
0 голосов
/ 18 июня 2020

I wi sh у вас все хорошо!
Как известно, следующие методы определены следующим образом
open (method, URL, asyn c) : Задает тип запроса
send () : отправляет запрос на сервер
onreadystatechange : определяет функцию, которая будет вызываться при изменении свойства readyState

В приведенной ниже части кода я не понял, почему мы сначала вызвали onreadystatechange (который вызывает myFunction () , который обрабатывает данные, хранящиеся в файле XML), хотя мы еще не указали, что это за наш файл XML, используя методы open () и send () ?

function loadDoc() {
var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
    myFunction(this);
    }
  };
  xhttp.open("GET", "cd_catalog.xml", true);
  xhttp.send();
}
function myFunction(xml) {
  var i;
  var xmlDoc = xml.responseXML;
  var table="<tr><th>Artist</th><th>Title</th></tr>";
  var x = xmlDoc.getElementsByTagName("CD");
  for (i = 0; i <x.length; i++) {
    table += "<tr><td>" +
    x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +
    "</td><td>" +
    x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
    "</td></tr>";
  }
  document.getElementById("demo").innerHTML = table;
}

To на мой взгляд, нам нужно сначала указать наш запрос с помощью open (), а затем добавить этот код

xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};

, поэтому мне интересно, является ли выполнение кода, который я указал в первую очередь, последовательным!

...