2017-05-18 15 views
0

私は、テキストファイルから読み込まれたストレートテキストを返すようなコードを持っています(このインスタンスではJSONになりますが、必ずしも将来はそうでないかもしれません)。関数呼び出し。最終的に、そのテキストまたはそのセクションがウェブページ上に表示される。私は(ライン14を参照)は、単にデータの文字列を返す関数(readDoc)を作成しようとしていますが、私はグローバル変数のいずれかにresponseTextを渡すの問題が生じています...XMLHttpRequest関数呼び出しから 'responseText'を渡すには?

<!DOCTYPE html> 
<html lang="en-US"> 
    <head> 
     <title>Not Working Example</title> 
    </head> 
    <body onload="myfunction()"> 
     <div id="demo1" onclick="loadDoc()">demo1</div> 
     <div id="demo2" onclick="loadDoc()">demo2</div> 
     <div id="demo3" onclick="loadDoc()">demo3</div> 
     <script> 
      var dataString = "Test"; 

      function loadDoc() { 
       var string = readDoc("TestData.json"); 
       document.getElementById("demo2").innerHTML = string; 
       document.getElementById("demo3").innerHTML = dataString; 
      } 

      function readDoc(fileName) { 
       var fReader = new XMLHttpRequest(); 
       fReader.onreadystatechange = function() { 
        if (this.readyState == 4 && this.status == 200) { 
         dataString = this.responseText; 
         document.getElementById("demo1").innerHTML = this.responseText; 
        } 
       }; 
       fReader.open("GET", fileName, true); 
       fReader.send(); 
      } 
     </script> 

    </body> 
</html> 

をコードの次のビットを参照してください。または行14の呼び出しに戻る& 22行目。私は間違っていますか? 行24とは異なり、表示する前にデータを最初に(別の関数で)操作したいので、HTML要素に直接書き込む必要はありません。 「TestData.json」の(一時的に簡単な)の例では、私は別の順列の多くを試してみましたが、所望の結果を得るために管理することができないよう

{ 
    "DataValue": 33 
} 

...です。そこにあるいくつかの「ジェノイド」は、「ああ、馬鹿馬鹿しくしたように見えるのは簡単だ」と言うだろうが、私は木の森を見ることができない。

+0

'XMLHttpRequest'は非同期ですので、あなたのコードは' dataString'を更新しますが、非同期の性質を扱うようにコードを変更しない限り、これがプログラム的にいつ発生するのかを知る方法はありません。 –

答えて

0

本当に結果を得るのはreadDocですか?結果を確認しましたか? console.logやアラートを使って確認できますか?

私は結果に隠れたタイプの入力が必要だと思うが、あなたは最初にreadDocで目的の結果が得られるようにしてください。

+0

私が言うことができる限りそれはある! 'document.getElementById( "demo")。innerHTML = this.responseText; 24行目には、文字列がWebページに正しく表示されているため、HTML要素が正しく挿入されます。 「隠しタイプ」に関しては、私はあなたが何を意味するのか分かりません。 – PolarBearNinja

+0

ああ、問題は非同期だと思う。 – Erwin

+0

私が知る限り、通知するデータセットの変更が必要です。 [ここ](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/observe)または[こちら](http://stackoverflow.com/questions/4561845/)を試すことができます。属性イベントの変更を発生させる)この助けを願っています。 – Erwin

関連する問題