2016-04-28 72 views
0

我有一些Javascript代码来读取文件。我在浏览器中打开从我的本地文件系统文件:

var rawFile = new XMLHttpRequest(); 
rawFile.open("GET", "test.txt", false); 
rawFile.onreadystatechange = function() { 
    if(rawFile.readyState === 4) { 
     if(rawFile.status === 200 || rawFile.status == 0) { 
      findWord(rawFile.responseText.split("\n")); 
     } 
    } 
} 
rawFile.send(null); 

这只是正常的,但它在Chrome弃用。发现后,我试图用$.get()这样的:

$.get("test.txt", function(result) { 
    alert(result); 
}); 

但它甚至没有警觉。

有没有办法在Chrome和Firefox中阅读此文件?请注意,我不想使用任何种类的<input type="file">,并且文本数据必须以文件的行数组形式返回。

我收到来自Chrome的警告和错误当使用$.get()$.ajax()

错误:

index.html:36 XMLHttpRequest cannot load file:///C:/Users/mz/Dropbox/Shubs/test.txt. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

我还没有在服务器上运行。所以本地主机在这种情况下不起作用。

+0

您是否在开发控制台上有任何错误? – IceManSpy

+0

@IceManSpy是的,等一下,编辑我的帖子 –

+2

'$ .get'不能在'file:///'上工作。考虑不要为本地文件系统上的事情做AJAX。 – apokryfos

回答

3

你得到:

Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource error

becaure你使用文件加载文件://C:/,因为它们不是其保持真正的错误信息HTTP ://所以我有两个解决方案,建议您:

  1. 要么你从服务器(PHP,的NodeJS)发送的文件,并抓住它在 客户端(AJAX)
  2. 或者您使用js文件读取器读取文本文件
+0

第二个答案与我的要求不符。您必须使用'> '为FileReader –

+0

,为什么不使用它? –

+0

因为我不想每次打开页面 –

-1

你试过这个吗?

$.ajax({ 
      url: "test.txt", 
      async: false, 
      success: function (data){ 
       console.log(data); 
      } 
     }); 

然后检查您的浏览器的控制台。

+0

是的,得到这个错误:'jquery -2.2.3.min.js:4 XMLHttpRequest无法加载file:/// C:/Users/mz/Dropbox/Shubs/test.txt。交叉来源请求仅支持协议方案:http,data,chrome,chrome-extension,https,chrome-extension-resource. –

+0

你可以在URL中尝试一些东西,比如'text.txt&callback =?' – hmd

+1

你的回答是对的在那里,你要求浏览器使用'file://'协议来“获取”一个文件,并且(正确地)说“不”。如果你把你的页面放在一个web服务器(例如IIS,Apache)上并从那里运行它(例如'http:// localhost/index.html'),它可能会正常工作。 – Jocie