Canot在Chrome中加载XML文件,但在Firefox和Edge中加载

时间:2018-10-19 22:21:01

标签: javascript xml google-chrome dom

我正在从事XML ES6技能的工作,但是无法在Chrome上打开和读取xml文件。该文件在Firefox和Edge中打开。 我想知道chrome是否有特殊的sintax或输入的内容有误。

这是来自crhome的错误消息:

index.html:27 [不推荐使用]不赞成在主线程上使用同步XMLHttpRequest,因为它对最终用户的体验有不利影响。如需更多帮助,请检查https://xhr.spec.whatwg.org/。 (匿名)@ index.html:27 index.html:29无法加载文件:/// C:/ Backup / Programacion / Practicas / Javascript%20(ES6)/Practica%203/datos_xml/books.xml:仅协议方案支持跨源请求:http ,数据,chrome,chrome扩展名,https。 (匿名)@ index.html:29 index.html:29未捕获的DOMException:无法在'XMLHttpRequest'上执行'发送':无法加载'file:/// C:/ Backup / Programacion / Practicas / Javascript%20(ES6)/ Practica%203 / datos_xml / books.xml”。     在file:/// 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 个答案:

答案 0 :(得分:1)

此错误消息的重要部分是

  

仅协议方案支持跨源请求:http,数据,chrome,chrome扩展名,https

您正在从本地文件系统加载文件,如url上的file://前缀所示。由于file不是chrome为此目的支持的协议方案,因此您只能在chrome中执行此操作:使用一种命名的协议方案。

最可能的一个是http。您将需要设置一个http服务器来为您提供文件,而不是从文件系统中加载。

这可能会有所帮助:https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server