我一直在查看很多以前问过的问题,我仍然对如何使这个fileReader工作感到难过。目前我的代码如下:
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文件。在名称列表上的onClick事件处理程序期间调用updateWineProfile
。
我的问题是它只在第二次点击后才有效。想象一下,我有一个'A'和'B'列表。如果我第一次点击“A”,它会读到我的小“文本加载”行。但是一旦我点击“B”,它就会在显示项目B的名称时用项目A的生物填充'Info'
。
this.responseText
传入formatText()
时似乎没有更新。我认为添加reader.onload
会解决这个问题,但事实并非如此。
(我只读本地文件)
答案 0 :(得分:1)
您需要为onload
和onreadystatechange
分配一个功能。
您正在立即致电displayContents(wineName)
和doneLoading(wineName)
,然后在两种情况下分配其返回值(undefined
,因为它们没有return
条款)。