使用 AJAX 读取本地文件

IT技术 javascript ajax
2021-01-26 21:46:42

我是 AJAX 的新手,只想确认:如果我将所有代码都放在桌面上的一个文件夹中,并且我使用 AJAX 在 HTML 的 div 中输出文件内容,是否可以通过 AJAX 或文件必须在服务器上?

我只是第一次测试 AJAX 功能,我遇到了问题,因为它在 .js 文件中显示错误“拒绝访问”

5个回答

出于安全原因,JavaScript 对客户端文件系统的访问受到限制 - 考虑您是否希望(其他人的)JavaScript 读取您的敏感文档。

即使在试验时最好使用真实的拓扑结构,从服务器提供服务,而在真实系统中则可以从那里提供服务。

设置一个 Web 服务器(例如 Apache)以指向您的开发目录真的很容易,因此“服务器”只是您伪装的桌面。因此,编辑/测试周期非常快。

我的离线项目位于“my_project”文件夹中。所以,现在我需要从我的 index.html 向文件夹“my_project”请求一个 xml 文件。我不明白为什么这是安全漏洞。如果我将我的项目上传到服务器并从我的 index.html 请求来自服务器的 xml 文件,为什么不是?只是好奇。
2021-03-24 21:46:42
@Chameleon:区别在于在从该文件夹中读取。在在线情况下,Web 服务器软件直接读取,客户端间接读取如果 Web 服务器缺乏适当的权限,它也会失败。
2021-04-07 21:46:42

在任何浏览器 javascript 实现中,文件访问从一开始就被禁止。有人可以手动禁用浏览器中的“安全功能”。例如,对于 Google Chrome,您必须使用--disabled-web-securityas 命令行参数启动可执行文件Firefox 可以禁用它的about:config.

无论如何,如果您正在为公众编写代码,您当然完全不能依赖它。但隧道尽头有光。“新”JavascriptFile API已经在 Chrome 中可用,我猜/希望其他供应商很快就会跟进。该 API “正式”允许您的脚本读取本地机器上的文件。

Javascript 可在客户端运行,但访问权限有限,因此无法从客户端计算机访问本地文件。

因此,您需要在服务器上放置内容,而不是使用 ajax 并获取 div 中的数据以显示客户端。

如果你只是想用它进行测试,你可以尝试在 chrome 上禁用网络安全,然后它应该可以工作。

我希望可以使用 Ajax 在本地访问文件,我用 mozilla firefox 尝试过它并且运行良好。我创建了 2 个文本文件并在同一个文件夹中进行了调整。这是代码。如有错误,请见谅。

function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest(); //Not IE
    } 
    else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP"); //IE
    } 
    else {
        alert("Your browser doesn't support the XmlHttpRequest object.  Better upgrade to Firefox.");
    }
}           
var receiveReq = getXmlHttpRequestObject();     
function sayHello(fname) {
    if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
        receiveReq.open("GET", fname, true);
        receiveReq.onreadystatechange = handleSayHello; 
        receiveReq.send(null);
    }           
}
function handleSayHello() {
    if (receiveReq.readyState == 4) {
        document.getElementById('span_result').innerHTML = receiveReq.responseText;
    }
}

Here is the html code
<select name="files" onchange="sayHello(this.value)">
<option value="">Select a file</option>
<option value="file.txt">file.txt</option>
<option value="file2.txt">file2.txt</option>
<option value="ajax.html">Ajax.html</option>
</select><br>
<p>Contents of the file will be displayed below</p>
<div id="span_result"></div>