如何将文本文件的内容加载到JavaScriptvariables中?
我有我的Web应用程序的http://localhost/foo.txt的根文本文件,我想加载到一个variables在JavaScript ..在常规我会这样做:
def fileContents = 'http://localhost/foo.txt'.toURL().text; println fileContents;
我怎样才能在JavaScript中获得类似的结果?
XMLHttpRequest,即AJAX,没有XML。
你这样做的确切方式取决于你使用的是什么JavaScript框架,但是如果我们不考虑互操作性问题,你的代码将如下所示:
var client = new XMLHttpRequest(); client.open('GET','/foo.txt'); client.onreadystatechange = function(){ 警报(client.responseText); } client.send();
通常来说,虽然XMLHttpRequest在所有平台上都不可用,所以有些function已经完成。 再一次,你最好的select是使用像jQuery这样的AJAX框架。
一个额外的考虑:这只会在foo.txt在同一个域上时才起作用。 如果它位于不同的域中,则同源安全策略将阻止您读取结果。
这里是我如何在jQuery中做到这一点:
jQuery.get('http://localhost/foo.txt', function(data) { alert(data); });
如果您只想从文本文件中获取一个常量string,则可以将其包含为JavaScript:
// This becomes the content of your foo.txt file let text = ` My test text goes here! `;
<script src="foo.txt"></script> <script> console.log(text); </script>
有一件事要记住,Javascript运行在客户端,而不是在服务器上运行。 你不能真正的从Javascript中的服务器“加载文件”。 会发生什么是Javascript发送一个请求到服务器,服务器发回请求的文件的内容。 Javascript如何接收内容? 这就是callback函数的作用。 在爱德华的情况下,就是这样
client.onreadystatechange = function() {
而在丹伯的情况下,这是
function(data) {
这个函数在数据碰巧到达时被调用。 jQuery版本隐式使用Ajax,它只是通过将代码封装在库中来简化编码。
使用jQuery时,而不是使用jQuery.get
,例如
jQuery.get("foo.txt", undefined, function(data) { alert(data); }, "html").done(function() { alert("second success"); }).fail(function(jqXHR, textStatus) { alert(textStatus); }).always(function() { alert("finished"); });
你可以使用.load
,它给你一个更精简的forms:
$("#myelement").load("foo.txt");
.load
给你也可以select加载部分页面,可以派上用场,参见api.jquery.com/load/ 。
如果您的input结构为XML,则可以使用importXML
函数。 (更多信息在这里quirksmode )。
如果它不是XML,并且没有用于导入纯文本的等效函数,则可以在隐藏的iframe中打开它,然后从那里读取内容。