2016-06-15 10 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イベントハンドラ中に呼び出されます。

私の問題は、2回目のクリック後にのみ機能することです。私が「A」と「B」のリストを持っているとしましょう。初めて「A」をクリックすると、私の小さな「テキスト読み込み」行が読み上げられます。しかし、 'B'をクリックすると、'Info'にアイテムAのバイオが埋め込まれ、アイテムBの名前が表示されます。

formatText()に渡されたときにthis.responseTextは更新されていないようです。私はreader.onloadを追加するとこれを修正すると思ったが、それはない。

(私はローカルファイルだけを読んでいる)

答えて

1

あなたはonloadonreadystatechangeに機能を割り当てる必要があります。

すぐdisplayContents(wineName)doneLoading(wineName)を呼び出した後、(彼らはreturn文を持っていないとして、どちらの場合もundefined)その戻り値を割り当てています。

+0

私のうわー...なんて新人ミスですか?ありがとう! – PieMan