2012-04-05 22 views
0

Ich versuche, einen Zufallsgenerator zu erstellen und auf einer anderen Seite, wenn ein Hinweis gefunden, dass dies mit jQuery einfach wäre, also habe ich Folgendes versucht.jquery-Funktion zeigt nichts

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

es soll wie folgt funktionieren: es lädt ein Dokument mit mehreren Textzeilen am spaltet es bei Zeilenumbruch auf. Dies sollte in einem Array gespeichert werden und eine zufällige Zeile sollte auf der Website angezeigt werden.

Meine erste Idee war, den Text direkt in ein Array zu schreiben, aber ich dachte, es wäre effizienter für die Website.

Vielen Dank für

PS zu beantworten: es keine Fehlermeldung wie „Fehler auf dieser Seite“ ist, wenn der Browser läuft.

Finale bearbeiten:

Danke für die Hilfe !!! Jetzt funktioniert es.

Hier ist die Lösung:

<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

Sie haben die jquery-Datei nicht eingeschlossen. –

+0

meinst du eine Codezeile wie diese? bethlis

+0

Ja, wo auch immer Ihre jquery-Datei ist Einige ting wie folgt, wenn Sie die jquery haben .js-Datei im selben Verzeichnis:

2

Sie müssen document.write() setzen in Ihrem function(msg) wie AJAX asynchron ist und load ist AJAX, so ist document.write() bis load warten nicht Ihre anonyme Funktion

beendet ruft
$(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>'); 
    }); 
    }); 

EDIT:

ich habe gerade n oticed Sie haben nicht enthalten Ihre jQuery-Bibliothek o_O

Fügen Sie den folgenden über dem <script>

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

Sie sollten document.write niemals in einem Callback verwenden. Wenn document.write nach dem Laden des DOM ausgeführt wird, wird die gesamte Seite überschrieben. – zetlen

+1

@zetlen danke für das zeigen, bearbeitet –

0

NiftyDude ist richtig, dass Sie Ihre document.write Anruf außerhalb des Bereichs Ihrer document.ready Funktion gesetzt haben. Auch:

  • Es ist auch fast immer eine schlechte Idee, document.write zu verwenden. In diesem Fall warten Sie darauf, dass ein AJAX-Anruf abgeschlossen wird, bevor Sie ihn verwenden. Dies bedeutet, dass Sie das Dokument garantieren. Write überschreibt den gesamten Seitenrumpf.
  • Sie verwenden $ ('body'). Load, was in diesem Fall unpassend ist - Sie fügen dem Text manuell Text hinzu.

Hier ist ein fix:

<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

Danke für Ihre Hinweise !! Es ist jetzt auch viel schneller und funktioniert gut, aber jetzt druckt es zuerst das gesamte Array. – bethlis

+0

Klingt so, als hätten Sie Ihre $ ('body') Datei nicht mit $ .get ersetzt. – zetlen