0

こんにちは皆さん^そのようなコードがあります:

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
</head>

<body>
<script type="text/javascript">
var array = [];
$.get("http://wisepla3nt.com/331.txt", 
       function(data) {
           array = data.split(/\r\n|\r|\n/)
       }
);
</script>
<script>alert(array[Math.floor(Math.random()*array.length)]);</script>
</body>
</html>

警戒中は未定義です。なんで?配列はグローバルです。

4

4 に答える 4

5

渡した関数getはすぐには実行されません。これはイベント ハンドラーとして割り当てられ、ブラウザーが HTTP 要求への応答を取得したときに起動します。

アラート ステートメントが発生するまで、応答は到着しません。

コールバック関数で応答に依存する作業を行います。

于 2013-09-28T11:01:48.773 に答える
1

おそらく、 $.get 関数が返される前に警告しているためです。

$.get メソッドは Ajax 呼び出しであり、非同期であることを意味します。アラート コードをコールバック メソッドに移動してみてください。

于 2013-09-28T11:02:51.067 に答える
0

getalert非同期であり、その直後でサーバーからの応答の前に呼び出しています

arrayは空で、array.lengthゼロであり、Math.random()*0戻ります0が、ないのでarray[0]戻りますundefined

于 2013-09-28T11:03:24.900 に答える
0

配列を埋める文字列の直後に alert() を移動します。

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
</head>

<body>
<script type="text/javascript">
var array = [];
$.get("http://wiseplant.com/1.txt",
       function(data) {
           array = data.split(/\r\n|\r|\n/)
           alert(array[Math.floor(Math.random()*array.length)]);
       }
);
</script>
</body>
</html>
于 2013-09-28T11:08:34.170 に答える