使用AJAX读取本地文件

时间:2011-08-03 08:36:24

标签: javascript ajax

我是AJAX的新手并且只想确认:如果我将所有代码放在桌面上的文件夹中并且我使用AJAX以HTML格式输出文件内容,是否可以访问本地文件通过AJAX或文件应该在服务器上?

我只是第一次测试AJAX功能,因为它在.js文件中显示错误“Access denied”而面临问题

5 个答案:

答案 0 :(得分:9)

出于安全原因,JavaScript对客户端上文件系统的访问受到限制 - 请考虑是否需要(别人的)JavaScript来读取您的敏感文档。

即使在尝试使用真实拓扑结构时,最好还是使用真实系统中提供的服务器来提供服务。

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

答案 1 :(得分:3)

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

无论如何,如果您正在为公众编写代码,那么您完全不能依赖于此。但隧道尽头有光明。 “新”Javascript File API已在Chrome中提供,其他供应商很快就会推出。该API“正式”允许您的脚本读取本地计算机上的文件。

答案 2 :(得分:1)

Javascript在客户端工作但访问受限,因此无法从客户端计算机访问本地文件。

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

答案 3 :(得分:1)

如果您只是想进行测试,可以尝试在Chrome上禁用网络安全,然后就可以了。

答案 4 :(得分:-1)

我希望可以使用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>