2016-06-15 1 views
1

이전에 많은 질문을 살펴 봤는데이 fileReader를 작동시키는 방법에 대해 여전히 혼란 스럽습니다. 현재 가지고있는 코드는 다음과 같습니다.JavaScript - XMLHttpRequest() 문제

var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP'); 
function updateWineProfile(name){ 
    //write bio info 
    var filePath = "Data/"+name+".txt"; 
    loadFile(filePath, name); 
} 
function loadFile(filePath, wineName) { 
    reader.onreadystatechange = displayContents(wineName); 
    reader.onload = doneLoading(wineName); 
    reader.open('get', filePath, true); 
    reader.send(); 
} 
function displayContents(wineName) { 
    if(reader.readyState === 4 && reader.status === 200) { 
     reader.responseText = formatText(reader.responseText, wineName); 
     //document.getElementById('Info').innerHTML = ""; 
    } else{ 
     reader.responseText = formatText(reader.responseText, wineName); 
     document.getElementById('Info').innerHTML = formatText("Text Loading. Please Try Again.", wineName); 
    } 
} 
function doneLoading(name) { 
    document.getElementById('Info').innerHTML = formatText(this.responseText, name); 
} 

나는 이름 목록을 가지고 있으며 각 이름에 대해 "Info"라는 .txt 파일을 가지고 있습니다. updateWineProfile은 이름 목록에서 onClick 이벤트 처리기 중에 호출됩니다.

내 문제는 두 번째 클릭 후에 만 ​​작동한다는 것입니다. 내가 'A'와 'B'의 목록을 가지고 있다고 상상해보십시오. 'A'를 처음 클릭하면 작은 '텍스트로드'행을 읽습니다. 하지만 'B'를 클릭하면 항목 B의 이름을 표시하면서 'Info'을 항목 A의 약력으로 채 웁니다.

formatText()에 전달되었을 때 this.responseText은 업데이트되지 않은 것으로 보입니다. reader.onload을 추가하면이 문제를 해결할 수 있다고 생각했지만 그렇지 않았습니다.

(I은 로컬 파일을 읽고 있어요)

답변

1

당신은 onloadonreadystatechange에 기능을 할당해야합니다.

당신은 (그들은 더 return 문이 없기 때문에 두 경우 모두 undefined) 즉시 후 자신의 반환 값을 할당 displayContents(wineName)doneLoading(wineName)를 호출

.

+0

O 내 와우 ... 신인이 얼마나 슬픈 일입니까? 고마워요! – PieMan