Доступ к XML-файлу с локального хоста в javascript

Я читаю XML-файл с помощью javascript, а затем отображаю его на своей html-странице

он отлично работает с FireFox.

Я погуглил и обнаружил, что это потому, что мой файл находится на моем жестком диске, поэтому Chrome и IE не работают, а Chrome выдает эту ошибку

clocks.html:20 Failed to load file:///B:/Data/clocks.xml: 
Cross origin requests are only supported for protocol schemes: 
http, data, chrome, chrome-extension, https.

поэтому я создал локальный веб-сайт и добавил туда файл

http://localhost/clocks.xml

Я могу получить доступ к файлу по этой ссылке, но когда я заменяю clocks.xml в моем скрипте на http://localhost/clocks.xml, страница не работает даже в FireFox и получаю эту ошибку из FireFox

Cross-Origin Request Blocked: The Same Origin Policy disallows 
reading the remote resource at http://localhost/clocks.xml. 
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]

как я могу заставить это работать во всех браузерах

мой сценарий здесь

        window.onload = function() {
            getClockInformation();
        }

        function getClockInformation() {
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    updateClocks(this);
                }
            };
            xhttp.open("GET", "http://localhost/clocks.xml", true);
            xhttp.send();
        }

Как вы загружаете html-файл прямо с диска? т.е. ваш браузер попадает на file:///some/path/to/file.html? Вам нужно будет загрузить html-файл из того же домена, в вашем случае http://localhost. Или настройте свой сервер для отправки соответствующих заголовков cors для вашего XML-файла.

Patrick Evans 17.09.2018 02:05

файл clocks.xml находится в той же папке, что и html-страница ..

asmgx 17.09.2018 02:06

Да, но загружаете ли вы html-страницу с URL-адреса localhost, то есть http://localhost/file.html

Patrick Evans 17.09.2018 02:07

нет, я просто дважды щелкаю по html, который открывается так: B: \ data \ clocks.html

asmgx 17.09.2018 02:08

Да, это заставляет его проверять CORS, поскольку URL-адрес file:/// считается другим доменом, чем http://localhost. Загрузите его с локального хоста, как будто вы XML-файл, т.е. http://localhost/file.html, и запрос будет работать.

Patrick Evans 17.09.2018 02:09

в любом случае он может работать прямо из папки, так как он будет отправлен другим клиентам. он уже работает в FireFox, проблема в Chrome

asmgx 17.09.2018 02:11
since a file:/// url is considered a dfifferent domain - в Chrome ... Firefox не имеет этого ограничения, поскольку, как уже указывает OP, already working in Firefox
Jaromanda X 17.09.2018 02:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
1 349
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите просто запустить его прямо с диска, вы не сможете использовать ajax в качестве Chrome, и, возможно, другие браузеры просто не разрешат загрузку URL-адресов file:///.

Вы можете обойти это, используя ввод файла или операцию перетаскивания, чтобы получить файл.

HTML

Select the clocks.xml file
<input type = "file" id = "xmlfile">

Javascript

var fileInput = document.querySelector("#xmlfile");
fileInput.addEventListener("change",function(e){
  var file = fileInput.files[0];
  var reader = new FileReader();
  reader.onloadend = function(){
    var data = reader.result;
    //data will now contain the xml text
    //use DOMParser to parse it
    var xmlDocument = (new DOMParser()).parseFromString(data,"application/xml");
    //then use the various element methods to get the elements you need
    //for instance if you had a <clock> element
    var clockData = xmlDocument.querySelector("clock").textContent
  };
  reader.readAsText(file);
})

В противном случае вам нужно будет настроить cors или загрузить как html, так и xml с вашего сервера.

DOMParser API

FileReader API

Я добавил свой html в локальный домен, работает в Chrome, но не в IE.

asmgx 17.09.2018 02:45

Другие вопросы по теме