jQuery:从文件系统中读取文本文件
我试图使用jquery读取文本文件,如下所示:
// LOAD file and split line by line and append divs $.get('myFile.txt', function(data) { var lines = data.split("\n"); $.each(lines, function(n, elem) { $('#myContainer').append('' + elem + ''); }); });
在chrome中,我得到:
XMLHttpRequest cannot load file:///C:/myPath/myFile.txt. Origin null is not allowed by Access-Control-Allow-Origin.
Firefox没有显示错误,但代码没有执行(我在firebug中有断点,匿名函数从不运行)。
任何帮助赞赏!
编辑 :
必须:
- 使用文件完整路径
- 使用“–allow-file-access-from-files”启动chrome
现在它工作正常!
您无法从本地文件系统加载文件,如此,您需要将其放在Web服务器上并从那里加载它。 在您加载JavaScript的同一站点上。
编辑:看看这个线程 ,您可以使用选项--allow-file-access-from-files
启动chrome,这将允许访问本地文件。
指定文件URL的完整路径
这至少在Firefox中运行良好。
我遇到的问题是,我得到的是一个XML对象而不是纯文本字符串。 从我的本地驱动器读取xml文件工作正常(与html相同的目录),所以我不明白为什么阅读文本文件会是一个问题。
我想我需要告诉jquery传递一个字符串而不是一个XML对象。 这就是我做的,它终于奏效了:
function readFiles() { $.get('file.txt', function(data) { alert(data); }, "text"); }
注意最后添加”text“’。 这告诉jquery将’file.txt’的内容作为字符串而不是XML对象传递。 警告框将显示文本文件的内容。 如果删除末尾的“”文本“,警告框将显示”XML对象“。
我使用的解决方法是将数据包含为js文件,该文件实现将原始数据作为字符串返回的函数:
HTML:
check out the data!
的script.js:
// function wrapper, just return the string of data (csv etc) function getData () { return 'look at this line of data\n\ oh, look at this line' }
在这里看到它的运行 – http://plnkr.co/edit/EllyY7nsEjhLMIZ4clyv?p=preview缺点是你必须对文件进行一些预处理以支持多线(用'\n\'
附加字符串中的每一行) 。
这个是有效的
$.get('1.txt', function(data) { //var fileDom = $(data); var lines = data.split("\n"); $.each(lines, function(n, elem) { $('#myContainer').append('' + elem + ''); }); });
这不起作用,它不应该因为它将是一个巨大的安全漏洞。
看看新的File System API 。 它允许您请求访问由浏览器管理的虚拟沙盒文件系统。 您必须要求您的用户将其文件“上传”到沙盒文件系统中一次,但之后您可以非常优雅地使用它。
虽然这绝对是未来,但它仍然是高度实验性的,只有CanIUse知道才能在Google Chrome中使用。
只要文件不需要动态生成,例如,简单的文本或html文件,您就可以在没有Web服务器的情况下在本地测试它 – 只需使用相对路径。
没有WEB SERVER你就做不到!!! Chrome将XMLHttpRequest发送到看起来像这样的系统
GET /myFile.txt HTTP/1.1
并且操作系统没有在端口80上监听以接收此信息! 即使它是,它必须实现HTTP协议与浏览器通信…
要使其正常工作,您必须在系统上安装WEB SERVER,它将侦听端口80并通过HTTP连接使您的文件可用,从而使您的代码可以运行。