JavaScript - XMLHttpRequest()问题

时间:2016-06-15 19:58:58

标签: javascript filereader

我一直在查看很多以前问过的问题,我仍然对如何使这个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会解决这个问题,但事实并非如此。

(我只读本地文件)

1 个答案:

答案 0 :(得分:1)

您需要为onloadonreadystatechange分配一个功能。

您正在立即致电displayContents(wineName)doneLoading(wineName) ,然后在两种情况下分配其返回值(undefined,因为它们没有return条款)。