我一直在查看许多先前问的问题,但我仍然对如何使此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);
}
我有一个名称列表,对于每个名称,我都有一个带有"信息"的.txt文件。 updateWineProfile
在名称列表中的onclick事件处理程序中被调用。
我的问题是它仅在第二次点击后起作用。想象一下我有" A"one_answers" B"的列表。如果我第一次单击" A",它将读取我的小"文本加载"行。但是,一旦我单击" B",它将在显示项目B的名称时使用项目A的BIO填充'Info'
。
this.responseText
传递到formatText()
时似乎没有更新。我认为添加reader.onload
可以解决此问题,但还没有解决。
(我只读本地文件)
您需要将功能分配给onload
和onreadystatechange
。
您正在调用displayContents(wineName)
和doneLoading(wineName)
立即,然后分配其返回值(在两种情况下,undefined
,因为它们没有return
语句)。