#javascript #xml #xmlhttprequest
#javascript #xml #xmlhttprequest
Вопрос:
Я решаю одну проблему около 3 часов, искал много тем по этому поводу … но я все еще в тупике.
Хотите загрузить XML-файл с сервера при загрузке (пробовал также из общедоступной папки, тот же результат) и использовать их для API, аналогичного Google Maps (но API — это не проблема).
Я перепробовал много способов, как записать загрузку xml через XMLHttpRequest, но всегда одно и то же.
Несколько раз все в порядке, затем я меняю какой-то небольшой код и терплю неудачу, а затем, если я отменяю изменения, он все равно терпит неудачу… Не могу распознать шаблон, что может быть не так.
Проблема в том, что состояние готовности иногда равно 1, а статус 0. Иногда все в порядке, и я могу перейти к телу функции.
Я запускаю сервер apache с php (symfony), и путь к файлу в порядке (я тоже вижу его в браузере. И еще раз … иногда это нормально)
Вот мой код для начала файла js:
var request = new XMLHttpRequest();
request.open("GET", 'http://localhost/project/src/test.xml', true);
request.responseType = 'document';
request.overrideMimeType('text/xml');
request.onload = function () {
if (request.readyState === request.DONE) {
if (request.status === 200) {
console.log(doc);
// Some other code (parsing xml)
}
}
};
request.send();
Возможно, необходим какой-то другой способ загрузки, кроме как через XMLHttpRequest, но не знаю, как в конечном итоге.
Спасибо за помощь!
Комментарии:
1. Теперь мне пришла в голову идея. Может быть, это потому, что загрузка XML является асинхронной? Так что, может быть, нужно что-то вроде await в c #?
2. Попробуйте
onreadystatechange
подход.3.Обычно вы проверяете
readyState
внутри обработчикаreadystatechange
событий. Это связаноreadyState
с тем, что значение изменится с0
на4
, и вы захотите что-то сделать, когдаreadyState
4
оно будет достигнуто. Обработчикonload
события будет вызываться всякий4
раз, когда будет достигнут, поэтому проверкаreadyState
ничего не даст. Но гдеdoc
определена переменная? И вы проверяете свойстваresponseText
orresponseXML
всякийonload
раз, когда запускается?4. Да, это асинхронно, но поскольку JavaScript управляется событиями, можно дождаться запуска
load
события, прежде чем продолжить. Хотяasync / await
это просто еще один способ приблизиться к вашему коду, но не объяснит, с чем вы столкнулись.5. Хм, onreadystatechange помогает (y) . Но у меня все еще есть вопрос.. Я хочу использовать данные из этого тела сразу после отправки. И, как я вижу в debugger , код в разделе send вызывается до ввода тела onreadystatechange, это означает, что я не могу использовать данные из этого запроса. Как дождаться завершения запроса?