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连接使您的文件可用,从而使您的代码可以运行。