我的网络应用 http://localhost/foo.txt 的根目录中有一个文本文件,我想将其加载到javascript中的变量中..在groovy中我会这样做:< / p>
def fileContents = 'http://localhost/foo.txt'.toURL().text;
println fileContents;
如何在javascript中获得类似的结果?
答案 0 :(得分:127)
XMLHttpRequest,即AJAX,没有XML。
您执行此操作的确切方式取决于您使用的JavaScript框架,但如果我们忽略互操作性问题,您的代码将类似于:
var client = new XMLHttpRequest(); client.open('GET', '/foo.txt'); client.onreadystatechange = function() { alert(client.responseText); } client.send();
但是,正常情况下,XMLHttpRequest并非在所有平台上都可用,因此一些软件已经完成。再一次,最好的办法是使用像jQuery这样的AJAX框架。
一个额外的考虑因素:只有foo.txt在同一个域上时才会有效。如果它位于不同的域中,则同源安全策略将阻止您读取结果。
答案 1 :(得分:81)
这是我在jquery中的表现:
jQuery.get('http://localhost/foo.txt', function(data) {
alert(data);
});
答案 2 :(得分:22)
如果您只想从文本文件中获取常量字符串,则可以将其包含为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可以访问从文件加载的字符串。 `(反引号)字符开始和结束template literal,允许文本块中的“和”字符。
当您尝试在本地加载文件时,此方法很有效,因为Chrome不允许在file://
方案的网址上使用AJAX。
答案 3 :(得分:15)
fetch('http://localhost/foo.txt')
.then(response => response.text())
.then((data) => {
console.log(data)
})
答案 4 :(得分:9)
const response = await fetch('http://localhost/foo.txt');
const data = await response.text();
console.log(data);
请注意,await
仅可以在async
函数中使用。一个更长的例子可能是
async function loadFileAndPrintToConsole(url) {
try {
const response = await fetch(url);
const data = await response.text();
console.log(data);
} catch (err) {
console.error(err);
}
}
loadFileAndPrintToConsole('https://threejsfundamentals.org/LICENSE');
答案 5 :(得分:8)
要记住的一件事是Javascript在客户端运行,而不是在服务器上运行。您无法在Javascript中真正从服务器“加载文件”。会发生什么是Javascript向服务器发送请求,服务器发回所请求文件的内容。 Javascript如何收到内容?这就是回调函数的用途。在爱德华的案例中,那就是
client.onreadystatechange = function() {
而在danb的情况下,它是
function(data) {
只要数据到达,就会调用此函数。 jQuery版本隐式使用Ajax,它只是通过将代码封装在库中来简化编码。
答案 6 :(得分:6)
这几乎适用于所有浏览器:
var xhr=new XMLHttpRequest();
xhr.open("GET","https://12Me21.github.io/test.txt");
xhr.onload=function(){
console.log(xhr.responseText);
}
xhr.send();
此外,还有新的Fetch
API:
fetch("https://12Me21.github.io/test.txt")
.then( response => response.text() )
.then( text => console.log(text) )
答案 7 :(得分:1)
使用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
,它会为你提供更加精简的形式:
$("#myelement").load("foo.txt");
.load
还为您提供加载可以派上用场的部分页面的选项,请参阅api.jquery.com/load/。
答案 8 :(得分:-4)
如果您的输入结构为XML,则可以使用importXML
函数。 (更多信息here at quirksmode)。
如果它不是XML,并且没有用于导入纯文本的等效函数,则可以在隐藏的iframe中打开它,然后从那里读取内容。