0

ランダムジェネレーターを作成しようとしていますが、ヒントが見つかった場合は別のページで、jQueryを使用すると簡単にできるので、次のことを試しました。

<html>
 <head>
  <title>hello</title>
 </head>
 <body>
  <script type="text/javascript">
   $ (document).ready(function() {
    $("body").load("hello.txt", function(msg) {
        var textArray = msg.split("\n");
    var zufall = Math.round ( ( textArray.length - 1 ) * ( Math.random() ) );
    });
   });
   document.write('<p>' + textArray[zufall] + '</p>');
  </script>
 </body>
</html>

これは次のように機能するはずです。数行のテキストを含むドキュメントをロードし、改行で分割します。これは配列に格納する必要があり、ランダムな行がWebサイトに表示される必要があります。

私の最初のアイデアは、テキストを配列に直接書き込むことでしたが、それをロードする方がWebサイトにとってより効率的だと思いました。

回答ありがとうございます

PS:ブラウザの実行時に「このページのエラー」のようなエラーメッセージはありません。

最終編集

助けてくれてありがとう!!! 今では動作します。

解決策は次のとおりです。

<html>
    <head>
        <title>hello</title>
    </head>
    <body>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
            <script type="text/javascript">
            $ (document).ready(function() {
                 $.get("hello.txt", function(msg) {
                    var textArray = msg.split("\n");
            var zufall = Math.round ( ( textArray.length - 1 ) * ( Math.random() ) );

            $('body').append('<p>' + textArray[zufall] + '</p>');
                });
            });
        </script>
    </body>
</html>
4

3 に答える 3

2

AJAXは非同期であり、AJAXを使用しているため、document.write()内部に配置する必要があります。匿名関数の呼び出しが終了するまで待機しないでください。function(msg)loaddocument.write()load

   $(document).ready(function() {
    $.get("hello.txt", function(msg) {
        var textArray = msg.split("\n");
        var zufall = Math.round ( ( textArray.length - 1 ) * ( Math.random() ) );
        $('body').append('<p>' + textArray[zufall] + '</p>');
    });
   });

編集:

jqueryライブラリo_Oが含まれていないことに気づきました

上記に以下を追加します<script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
于 2012-04-05T10:03:57.813 に答える
0

NiftyDudeは、document.write呼び出しをdocument.ready関数の範囲外に置いたことは正しいです。また:

  • また、ほとんどの場合、document.writeを使用することはお勧めできません。この場合、AJAX呼び出しが完了するのを待ってから使用します。つまり、document.writeがページ本文全体を上書きすることを保証します。
  • $('body')。loadを使用していますが、この場合は不適切です。本文にテキストを手動で追加します。

修正は次のとおりです。

<html>
 <head>
  <title>hello</title>
 </head>
 <body>>
  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript">
   $(document).ready(function() {
    $.get("hello.txt", function(msg) {
        var textArray = msg.split("\n");
        var zufall = Math.round ( ( textArray.length - 1 ) * ( Math.random() ) );
        $('body').append('<p>' + textArray[zufall] + '</p>');
    });
   });
  </script>
 </body>
</html>
于 2012-04-05T10:16:15.217 に答える
0

この代替ソリューションを試してください

$(document).ready(function() {
    $.ajax({ 
        url: "hello.txt",
        type: "GET",
        dataType: "text",
        success: function(data) {
            textArray = data.split("\n");
            zufall = Math.round ( ( textArray.length - 1 ) * ( Math.random() ) );
             document.write('<p>' + textArray[zufall] + '</p>');
        }
    });
});

また、jqueryファイルが含まれていることを確認してください。

于 2012-04-05T10:51:03.950 に答える