[javascript] 텍스트 파일의 내용을 자바 스크립트 변수에 어떻게로드합니까?

내 웹 응용 프로그램 http : //localhost/foo.txt 의 루트에 텍스트 파일이 있으며 javascript ..의 변수에 파일을로드하고 싶습니다.

def fileContents = 'http://localhost/foo.txt'.toURL().text;
println fileContents;

자바 스크립트에서 비슷한 결과를 얻으려면 어떻게해야합니까?



답변

XML이없는 XMLHttpRequest, 즉 AJAX

이 작업을 수행하는 정확한 방법은 사용중인 JavaScript 프레임 워크에 따라 다르지만 상호 운용성 문제를 무시하면 코드는 다음과 같습니다.

var client = new XMLHttpRequest ();
client.open ( 'GET', '/foo.txt');
client.onreadystatechange = 함수 () {
  경고 (client.responseText);
}
client.send ();

그러나 일반적으로 모든 플랫폼에서 XMLHttpRequest를 사용할 수있는 것은 아니므로 약간의 퍼지가 수행됩니다. 다시 한 번, 가장 좋은 방법은 jQuery와 같은 AJAX 프레임 워크를 사용하는 것입니다.

한 가지 추가 고려 사항 : foo.txt가 동일한 도메인에있는 경우에만 작동합니다. 다른 도메인에있는 경우 동일한 원본 보안 정책으로 인해 결과를 읽을 수 없습니다.


답변

다음은 jquery에서 어떻게했는지입니다.

jQuery.get('http://localhost/foo.txt', function(data) {
    alert(data);
});


답변

업데이트 2019 : 가져 오기 사용 :

fetch('http://localhost/foo.txt')
  .then(response => response.text())
  .then((data) => {
    console.log(data)
  })

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API


답변

텍스트 파일에서 상수 문자열 만 원하는 경우 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에 액세스 할 수있게됩니다. `(backtick) 문자는 템플릿 리터럴을 시작하고 종료 하여 텍스트 블록에 “및”문자를 모두 허용합니다.

Chrome에서는 file://구성표 가있는 URL에서 AJAX를 허용하지 않으므로이 방법은 파일을 로컬로로드하려고 할 때 효과적 입니다.


답변

명심해야 할 것은 자바 스크립트가 서버가 아닌 클라이언트에서 실행된다는 것입니다. 자바 스크립트로 서버에서 실제로 “파일을로드”할 수 없습니다. Javascript는 서버에 요청을 보내고 서버는 요청 된 파일의 내용을 다시 보냅니다. Javascript는 내용을 어떻게 받습니까? 이것이 바로 콜백 함수입니다. 에드워드의 경우

    client.onreadystatechange = function() {

danb의 경우에는

 function(data) {

이 함수는 데이터가 도착할 때마다 호출됩니다. jQuery 버전은 암묵적으로 Ajax를 사용하며, 라이브러리에 해당 코드를 캡슐화하여 코딩을 더 쉽게 만듭니다.


답변

업데이트 2020 : 비동기 / 대기 상태에서 페치 사용

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');


답변

이것은 거의 모든 브라우저에서 작동합니다.

var xhr=new XMLHttpRequest();
xhr.open("GET","https://12Me21.github.io/test.txt");
xhr.onload=function(){
    console.log(xhr.responseText);
}
xhr.send();

또한 새로운 FetchAPI가 있습니다.

fetch("https://12Me21.github.io/test.txt")
.then( response => response.text() )
.then( text => console.log(text) )