2012-04-05 9 views
0

ランダムジェネレータを作成しようとしていますが、ヒントが見つかった場合は別のページにjQueryを使用すると簡単になるので、次のように試しました。jquery-functionに何も表示されない

<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> 

それは次のように動作するはずです: それは数行のテキストで文書を読み込み、ANS改行でそれを分割。これは配列に格納され、ランダムな行が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> 
+0

jqueryファイルは含まれていません。 –

+0

このようなコード行ですか? bethlis

+0

はい、どこにjqueryファイルがありますか jquery 。同じディレクトリにあるjsファイル

2

AJAXは非同期であり、loadは、AJAXを使用しているので、load

あなたの匿名関数を呼び出して終了するまで document.write()が待機しないようあなたの function(msg)document.write()を配置する必要があります
$(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>'); 
    }); 
    }); 

編集:

私はちょうどn oticedあなたがあなたのdocument.ready関数の範囲外でご使用のdocument.writeの呼び出しを入れていることを右である、あなたのjQueryライブラリO_O

があなたの<script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
+2

コールバック内でdocument.writeを使用しないでください。 DOMの読み込みが完了した後にdocument.writeが実行されると、ページ全体が上書きされます。 – zetlen

+1

@zetlenそれを指摘してくれてありがとう、 –

0

NiftyDudeの上に次の行を追加します。含まれていません。また、

  • ほとんどの場合、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> 
+0

あなたのヒントをありがとう! これはまたはるかに高速で、うまくいきますが、今度は配列全体を最初に印刷します。 – bethlis

+0

$( 'body')を置き換えていない可能性があります。$ .getで読み込みます。 – zetlen

関連する問題