teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/09/28 07:03

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -1,3 +1,14 @@
1
+ `XMLHttpRequest.open()`の第3引数に`true`を渡しているので、操作は非同期になります。
1
- 一連の処理の流れの中で`req.onload`にコールバック関数をセットしていますが、
2
+ 非同期処理のため`req.onload`にコールバック関数をセットしていますが、
2
- そのコールバックいつ呼ばれるかわからない状態ですよね。
3
+ そのコールバックいつ呼ばれるかわからない状態ですよね。
3
- つまり、まだデータがロードされていない(したがって`req.onload`にセットしたコールバック関数が実行されていない)かもしれない時点で、`console.log(result)` を実行していることになります。
4
+ つまり、まだデータがロードされていない(したがって`req.onload`にセットしたコールバック関数が実行されていない)かもしれない時点で、`console.log(result)` を実行していることになります。
5
+
6
+ コールバック関数の実行が完了するまで待つか、さもなくば、まずは同期処理にして`XMLHttpRequest.responseText`を参照するといいのではないでしょうか?
7
+
8
+ 下記ドキュメントを参照してください。
9
+
10
+ [XMLHttpRequest - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest)
11
+
12
+ あと、余談になりますが、XMLHttpRequestも使えますが非推奨になっています。
13
+
14
+ [まだXMLHttpRequestを使ってるの? fetchのすすめ - Qiita](https://qiita.com/uhyo/items/91649e260165b35fecd7)