只用JavaScript读取TXT文件

问题描述:

可以从我的HTML5游戏资源中逐行读取txt文件吗? (资源=我的游戏项目中的文件夹之一) 我在这个文件中保存了关于我游戏关卡的信息。 我只找到使用PHP,Ajax的示例,但所有这些都需要服务器,但我想在服务器或离线模式下运行我的游戏。 在此先感谢。只用JavaScript读取TXT文件

+0

你可以随时使用ajax来请求你需要的文件,如果你不使用网络服务器,你可以尝试使用file:// url scheme。 (或使用iframe) – Arjan 2013-03-09 09:53:02

+0

[从Javascript中读取txt文件]的可能重复(http://stackoverflow.com/questions/5135610/reading-a-txt-file-from-javascript) – 2013-03-09 09:55:03

+2

您可以使用appcache。第一次从你的服务器下载文件。但下一次,如果客户端处于脱机状态,它将从本地缓存中检索。 http://www.html5rocks.com/es/tutorials/appcache/beginner/ – hectorct 2013-03-09 09:55:59

模板和预处理语言(如LESS或CoffeeScript)经常使用的一种技术是使用脚本标记,其中type属性无法被浏览器识别。这会导致它被浏览器和搜索引擎忽略,但可以通过JavaScript访问。

demo | code view

<script type="text/mygamelevel" id="level1"> 
    0010011001111011 
    0011011100010 
    10101110111101101 
    </script> 

    <script type="text/javascript"> 
    var level = document.getElementById("level1").text; 
    var lines = level.split("\n"); 
    for (var i=0; i<lines.length; i++) { 
     var line = lines[i]; 
     if (!line.trim()) continue; 

     alert(line); 
    } 
    </script> 

如果一个文件是优选的,则可以动态地请求它。这是一个使用jQuery's get函数的例子。

$.get('levels/level1.txt', function(level) { 
    var lines = level.split("\n"); 
    for (var i=0; i<lines.length; i++) { 
     var line = lines[i]; 
     if (!line.trim()) continue; 

     alert(line); 
    } 
}); 

没有保证这样在回调代码将在任何给定的时间内执行,因此,我建议把一些启动新级别的代码在那里,如代码而不是其他地方。否则,您不知道您是否已经下载了关卡信息。通过内联数据,可以避免此问题,如此答案的第一个片段中所示。

+0

而不是'.innerHTML'使用'.text',[它是每个内联脚本的有效属性](http://stackoverflow.com/a/12761170/1139697)。 – Zeta 2013-03-09 10:13:11

+0

谢谢@Zeta,我不认为这是正确的,但它工作:-) – FakeRainBrigand 2013-03-09 10:13:58

+0

谢谢,但水平有点多,我不想保留在主index.html文件^^我可以做这样呢? 这不行,所以我应该怎么做才能使它正确? – Piotrek 2013-03-09 10:39:18

浏览器的JavaScript不能,也不应该直接访问本地文件系统。