1

Web サイトを開発しているときに障害に遭遇しました。同じディレクトリにあるテキスト ファイルを取得し、各行を配列として返すために必要です。

そこで私は調査を行い、十分に単純に見える関数を思いつきました。しかし、私が警告するとき(theArray); 未定義として返されます。私は何を間違っていますか?

function pullText(x)
{
  var fullText = [];
  fileReturn=new XMLHttpRequest();
  fileReturn.onreadystatechange=function()
  {
    if (fileReturn.readyState==4 && fileReturn.status==200)
    {
      entireTextFile = fileReturn.responseText;
      // alert(entireTextFile); works as expected here
      lines = fileReturn.responseText.split("\n");
      // alert(lines); works as expected here
      fullText = lines;
    }
  }
  // alert(fullText); does not work.
  fileReturn.open("GET",x,true);
  fileReturn.send();
  return fullText;
}
4

1 に答える 1

2

AJAX は A 同期であるため、そのようには機能しません。ドキュメントの準備ができたら、コールバック ハンドラを渡して呼び出す必要があります。

function pullText(x, callback)
{
//      var fullText = []; not necessary
  fileReturn=new XMLHttpRequest();
  fileReturn.onreadystatechange=function()
  {
    if (fileReturn.readyState==4 && fileReturn.status==200)
    {
      entireTextFile = fileReturn.responseText;
      // alert(entireTextFile); works as expected here
      lines = fileReturn.responseText.split("\n");
      // alert(lines); works as expected here
      callback(lines);
    }
  }
  // alert(fullText); does not work.
  fileReturn.open("GET",x,true);
  fileReturn.send();
}

pullText(whatever, function(lines) {
    // use lines here
});
于 2013-03-14T18:20:29.570 に答える