У меня есть проблема, из-за которой мне нужно извлечь содержимое файла XML, а затем заполнить его в раскрывающемся списке.Это должно быть легко, однако ссылка на этот файл XML меняется в обычном режиме.
Мой обходной путь для этого - получить страницу, на которой вы загружаете файл XML, найти ссылку, а затем использовать эту ссылку для получения файла XML.AKA Это займет 2 Http-запроса.
Мой код:
var data = null;
var Doc = new Document();
var element;
var link = "";
var xmlDoc;
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function() {
if(this.readyState === 4 && link === "") { //if we havent gotten the link yet, get it
Doc = this.response; //get the HTML document where the link is
element = Doc.getElementsByClassName("failoverLink")[0]; //get the element with the link
link = element.href; //get the link
console.log(link); // IMPORTANT: when running the script, this actually returns the link in this context
}
else
{
if(this.readyState === 4) //now get the actual XML Document
{
xmlDoc = this.responseXML; //get the document
var txt = "<option></option>"; //construct the dropdown box
var i;
var x = xmlDoc.getElementsByTagName("Region"); //get all elements that we need for the dropdown
for(i=0; i<x.length; i++) {
txt += "<option>" + x[i].attributes.Name.value + "</option>";
}
document.getElementById("dropdown").innerHTML = txt; //insert it into the page
}
}
});
xhr.open("GET", "https://cors-anywhere.herokuapp.com/<link 1 of the parent document> replaced for privacy purposes");
xhr.responseType = "document";
xhr.send(data);
xhr.abort();
var newlink = "https://cors-anywhere.herokuapp.com/" + link;
xhr.open("GET", newlink);
xhr.responseType = "document";
xhr.overrideMimeType('text/xml');
xhr.send(data);
xhr.abort();
Ожидаемый результат - получить документ XML.Это прекрасно работает в консоли разработчика!
При попытке запустить реальный сценарий, однако, он показывает ссылку в консоли просто отлично, но вне контекста функции прослушивателя событий она по-прежнему равна нулю.
У кого-нибудь есть идеи?
ИСПРАВЛЕНИЕ: Каждый раз, когда я запускаю каждую команду в консоли.Оно работает.Всякий раз, когда я запускаю их все вместе, он говорит, что это ноль.Я предполагаю, что я должен как-то ждать, пока это не закончится?Если так, то как?