質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

846閲覧

alertを2回経由しないと中身が呼び出されません.

nauml_oisii

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/09/11 02:23

前提・実現したいこと

javascriptとhtmlでサーバーに上げたcsvファイルを読み込み→jsでhtmlを生成するというシステムを開発しています.

csvファイルのデータを読み込んで配列(item)に入れた後,その配列(item)を呼び出すのにalertを2回経由しないと配列の中身が0という状態になってしまいます.

該当のソースコード

javascript

1<head> 2//html内に記入しています 3<script langage="javascript"> 4var item = new Array; 5function csv_array(data) { 6 var dataString = new Array; 7 var dataArray = new Array; 8 9 dataString = data.split('\n'); 10 for(var i = 0; i < dataString.length; i++){ 11 dataArray[i] = dataString[i].split(','); 12 item[i] = new Item(dataArray[i]);//Item関数にそれぞれの情報を飛ばします,ここで定義しているitem配列とは別です 13 } 14 15} 16 17function getCsvData(dataPath) { 18 const request = new XMLHttpRequest(); 19 request.open('GET', dataPath, true); 20 request.addEventListener('load', (event) => { 21 var response = event.target.responseText; 22 csv_array(response); 23 }); 24 request.send(); 25} 26getCsvData('../test_1.csv'); 27 28//1回目のalert,実行すると0と出ます 29alert(item.length); 30 31</script> 32</head> 33//htmlの記述が挟まります 34 35
<body> <form name = "question"> <script langage="javascript"> //2回目のalert,ここできちんと数が出るのですが1回目のalertが無いと0になります.また,alertが2つ無い時はその下のfor文内のitemの中身も無い状態です alert("2 "+item.length); for(i in item){ Write(item[i],i); //html生成する関数に情報を飛ばします } </script> </form> </body> ### 試したこと

getCsvdataやcsv_arrayファンクションでreturnを付けたりしてみたのですが,値が返って来ませんでした.

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

getCsvDataで登録しているイベントリスナーは、ロードが完了したときに呼ばれますよね。
つまりロードが完了するまでitemは確定しないわけですね。
1回目のalertは、イベントリスナーをただ登録しただけでその直後に実行しているので、itemの登録はまず終わっていないでしょう。
2回目のalertの時点でitemの登録が完了しているかどうかも、タイミングによりますね。
itemの参照はロードが完了してからにするようにしましょう。

投稿2021/09/11 02:33

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

onLoad イベントで処理を開始してはどうでしょうか?

投稿2021/09/11 02:34

takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問