当我读取本地文件时,Ajax无法正常工作

时间:2014-12-22 15:35:38

标签: javascript jquery html ajax xml

好的,我连续2天都无法解决这个问题..这里的考试:http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_xml2在w3schools网站上运行得很好。但是当我在notepad ++中复制并粘贴代码时。它不起作用。我已经下载了XML文件。我读的是AJAX不支持使用本地文件。我不明白吗?我对学校使用本地XML文件有所帮助。当AJAX不支持使用本地文件时,如何使用本地XML文件和AJAX。我从教学助手那里得到的唯一回应就是我应该使用firefox ...但是没有...它不起作用:Chrome,Internet Explorer,Mozila,Opera ......基本没什么......

我知道这里有类似的东西,但我无法让它发挥作用。如果有人知道我怎么能修改这个给定的代码工作localy,我会很感激..感谢提前..

<!DOCTYPE html>
<html>
    <head>
        <script>
            function loadXMLDoc(url) {
                var xmlhttp;
                var txt, x, xx, i;
                if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp = new XMLHttpRequest();
                } else { // code for IE6, IE5
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        txt = "<table border='1'><tr><th>Title</th><th>Artist</th></tr>";
                        x = xmlhttp.responseXML.documentElement.getElementsByTagName("CD");
                        for (i = 0; i < x.length; i++) {
                            txt = txt + "<tr>";
                            xx = x[i].getElementsByTagName("TITLE"); {
                                try {
                                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                                } catch (er) {
                                    txt = txt + "<td> </td>";
                                }
                            }
                            xx = x[i].getElementsByTagName("ARTIST"); {
                                try {
                                    txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                                } catch (er) {
                                    txt = txt + "<td> </td>";
                                }
                            }
                            txt = txt + "</tr>";
                        }
                        txt = txt + "</table>";
                        document.getElementById('txtCDInfo').innerHTML = txt;
                    }
                }
                xmlhttp.open("GET", url, true);
                xmlhttp.send();
            }
        </script>
    </head>

    <body>
        <div id="txtCDInfo">
            <button onclick="loadXMLDoc('cd_catalog.xml')">Get CD info</button>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:4)

您无法使用本地文件。本地文件系统是沙盒的,例如,您不能双击电子邮件附件中的HTML文档,在浏览器中打开它并将其私人文件上传到发件人的服务器。 / p>

如果要在本地测试Ajax,请安装本地Web服务器并通过它进行测试。

答案 1 :(得分:2)

文件可能巧合地位于同一台计算机上,但文件系统无法访问。它必须由在该机器上运行的Web服务器访问。

因此,例如,如果您有一个提供以下文件的Web服务器:

c:\server\web\

然后你对文件的AJAX请求就不会出现这个:

c:\server\web\somefile.xml

就是这样:

http://localhost/somefile.xml

该文件是&#34; local&#34;从它在同一台计算机上的意义上说。但它不是&#34;本地&#34;从某种意义上说它来自URL,而不是来自文件系统路径。出于相当明显的安全原因,浏览器不允许JavaScript代码访问文件系统。 (想象一下,任何网站都可以在不询问的情况下读取您计算机上任何文件的世界。)

包含JavaScript代码的HTML页面以及JavaScript代码正在读取的文件都应该从Web服务器提供,而不是从文件系统打开。