사용자 요청에 따라 서버에서 텍스트 형식의 데이터 파일을 읽는 자바 스크립트로 웹 페이지를 작성하고 있습니다. 일단 텍스트 파일이로드되면 데이터를 다소 조작해야합니다.자바 스크립트에서 텍스트 파일을 읽어야합니다.
로딩에 XMLHttpRequest를 사용하고 있지만 이제는 동기 요청이 "사용되지 않음"으로 표시됩니다. 로드되기 전에 데이터 조작을 시작할 수 없으므로이 경우 어떻게해야합니까?
사용자 요청에 따라 서버에서 텍스트 형식의 데이터 파일을 읽는 자바 스크립트로 웹 페이지를 작성하고 있습니다. 일단 텍스트 파일이로드되면 데이터를 다소 조작해야합니다.자바 스크립트에서 텍스트 파일을 읽어야합니다.
로딩에 XMLHttpRequest를 사용하고 있지만 이제는 동기 요청이 "사용되지 않음"으로 표시됩니다. 로드되기 전에 데이터 조작을 시작할 수 없으므로이 경우 어떻게해야합니까?
사용 asynchronous request :
function doGET(path, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// The request is done; did it work?
if (xhr.status == 200) {
// ***Yes, use `xhr.responseText` here***
callback(xhr.responseText);
} else {
// ***No, tell the callback the call failed***
callback(null);
}
};
xhr.open("GET", path);
xhr.send();
}
function handleFileData(fileData) {
if (!fileData) {
// Show error
return;
}
// Use the file data
}
// Do the request
doGET("/path/to/file", handleFileData);
또는 콜백을 처리하기 위해 더 현대적인 방법입니다 약속을 사용 : 로컬 파일을 처리하기 원하기 때문에
function doGET(path, callback) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// The request is done; did it work?
if (xhr.status == 200) {
// Yes, use `xhr.responseText` to resolve the promise
resolve(xhr.responseText);
} else {
// No, reject the promise
reject(xhr);
}
}
};
xhr.open("GET", path);
xhr.send();
});
}
// Do the request
doGET("/path/to/file")
.then(function(fileData) {
// Use the file data
})
.catch(function(xhr) {
// The call failed, look at `xhr` for details
});
나는 이것을 잘 모른다. 이 함수에서 값을 반환하기 위해 "return"을 사용해 보았지만 아직로드되지 않았기 때문에 항상 "undefined"를 반환합니다. 또한 전역 변수를 결과와 동일하게 설정하려고했지만 아직로드되지 않았기 때문에 "undefined"로 설정됩니다. 내 전체 응용 프로그램을이 함수 안에 넣어야합니까? – OZ1SEJ
요점은, 결과가 들어올 때까지는 스크립트가 계속 진행되는 것을 의미하지 않는다는 것입니다. 동기식 호출이 이제는 더 이상 사용되지 않을 것이라고 반 직관적으로 느낍니다. – OZ1SEJ
@ OZ1SEJ : 동기 호출은 호출이 실행되는 JavaScript 스레드를 차단해야합니다. 이것이 기본 UI 스레드 (기본 UI 스레드) 인 경우 호출이 완료 될 때까지 페이지에서 아무 것도 일어나지 않습니다. 페이지의 UI (최소한) 또는 브라우저 (경우에 따라)를 잠급니다. 비동기 요청은 네트워크 작업이 진행되는 동안 페이지가 응답을 유지할 수있게합니다. 브라우저에서 JavaScript를 사용하려면 비동기 작업을 포용해야합니다. –
이
시도사용 만들기 XMLHttpRequest
function readFile(file)
{
var f = new XMLHttpRequest();
f.open("GET", file, false);
f.onreadystatechange = function()
{
if(f.readyState === 4)
{
if(f.status === 200 || f.status == 0)
{
var res= f.responseText;
alert(res);
}
}
}
f.send(null);
}
은 그럼 당신은 File:\\
readFile('File:\\\yourpath');
는 동기하지만 비동기 요청을 사용하지 않습니다에 전화를해야합니다. :) – Jite