Не могу загрузить файл XML в Chrome, но он загружается в Firefox и Edge

1

Я практиковал свои навыки XML ES6 для работы и не мог открыть и прочитать xml файл на Chrome.It открыт в Firefox и Edge. Я хотел бы знать, есть ли специальный синтакс для хром или если я набрал что-то неправильно.

Вот сообщение об ошибках от crhome:

index.html: 27 [Усталость] Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной справки проверьте https://xhr.spec.whatwg.org/. (анонимно) @index.html: 27 index.html: 29 Не удалось загрузить файл:///C:/Резервное копирование /Programacion/Practicas/Javascript %20 (ES6)/Practica%203/datos_xml/books.xml: Перекрестное происхождение запросы поддерживаются только для схем протокола: http, data, chrome, chrome-extension, https. (анонимно) @index.html: 29 index.html: 29 Uncaught DOMException: не удалось выполнить 'send' on 'XMLHttpRequest': не удалось загрузить файл:///C: /Backup/Programacion/Practicas/Javascript %20 ( ES6)/Practica%203/datos_xml/books.xml. в файле:///C: /Backup/Programacion/Practicas/Javascript %20 (ES6)/Practica%203/index.html:29:6

И вот код:

        <section>
        <form action="/action_page.php">
          <select name="lista_libros" id="lib_list">

          </select>           
        </form> 
    </section>

    <script type="text/javascript">
        var w, documento_cargado,num_lib;
        var tit, aut, anio, prec;
        var array_libros = [];          
        // Create a connection to the file.
        w = new XMLHttpRequest();
        // Define which file to open and send the request.
        w.open("GET", "datos_xml/books.xml", false);
        w.setRequestHeader("Content-Type", "text/xml");
        w.send(null);
        // Place the response in an XML document (CORROBORAR EL NOMBRE DE DONDE LO PONE, CREO QUE ES UN OBJETO NO UN DOCUMENTO).
        documento_cargado = w.responseXML;
        // Place the root node in an element.
        Bookstore = documento_cargado.childNodes[0];
        num_lib = Bookstore.children.length;
        for (var i = 0; i < num_lib; i++){
            tit = documento_cargado.getElementsByTagName("title")[i].childNodes[0].nodeValue;
            aut = documento_cargado.getElementsByTagName("author")[i].childNodes[0].nodeValue;
            anio = documento_cargado.getElementsByTagName("year")[i].childNodes[0].nodeValue;
            prec = documento_cargado.getElementsByTagName("price")[i].childNodes[0].nodeValue;
            array_libros[i] = new Array (tit, aut, anio, prec);             
        }                       
        alert("ssss");
    </script>
    <script type="text/javascript">
        var option, x;
        for(var i = 0; i < num_lib; i++){
            x = document.getElementById("lib_list");
            option = document.createElement("option");
            option.text = array_libros[i][0];
            x.add(option);
        }               
    </script>

Saludos cordiales.

  • 1
    Chrome рассматривает file:/// uri как перекрестное происхождение, даже в file:/// страница - это своего рода мера безопасности .... попробуйте использовать http-сервер локально ... посмотрите, как в сообщении об ошибке указано Cross origin запросы поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https ... и file там нет
  • 1
    Кроме того, все браузеры будут жаловаться на синхронный XMLHttpRequest - потому что он устарел из-за его пагубных последствий для конечного пользователя.
Показать ещё 3 комментария
Теги:
dom
google-chrome

1 ответ

1
Лучший ответ

Важная часть сообщения об ошибке здесь

Запросы на кросс-начало поддерживаются только для схем протокола: http, data, chrome, chrome-extension, https

Вы загружаете файл из локальной файловой системы, как указано в file:// префикс на url. Поскольку file не является протоколом схем, поддерживаемых хром для этой цели, вы можете сделать только одну вещь, чтобы сделать эту работу в chrome: используйте одну из названных схем протокола.

Самый вероятный из них - http. Вам нужно будет настроить HTTP-сервер, чтобы обслуживать файлы для вас, вместо загрузки из файловой системы.

Это может быть полезно: https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server

  • 0
    ¿Могу ли я использовать AppServ для этого?
  • 0
    Если он может обслуживать файлы через http, он должен делать. Я не знаю это конкретное программное обеспечение, поэтому я не могу предоставить больше информации об этом.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню