Führen Sie js erneut aus, wenn div neu geladen wird

  • Wie führe ich die js-Datei erneut aus, wenn das div neu geladen wird?

    Im Kopf habe ich folgendes Skript:

     <script type="text/javascript">  
      var auto_refresh = setTimeout(  
      function ()  
      {  
        $('#scoreboard').fadeIn("slow");  
      }, 3000); // refresh every 10000 milliseconds  
    </script>  
     

    Im Körper habe ich diese div- und js-Datei:

     [pre> <div id="scoreboard">  
      <script language="javascript" 
    src="http://www.sportsnetwork.com/aspdata/clients/cbaskscoreboard.aspx?team=B87">
    </script>  
    </div>  
     

    Ich möchte die Javascript-Datei in einem bestimmten Intervall erneut ausführen. Kann es gemacht werden?

    21 October 2014
    Eric Leschinskiuser713713
2 answers
  • Dies ist der falsche Weg.

    Sie sollten eine Skriptdatei einmal in Ihr <head> oder am Ende Ihres <body> einfügen. . Diese Skriptdatei sollte eine Funktion definieren, die Sie aufrufen können. Jetzt können Sie diese Funktion direkt von Ihrem setTimeout aus aufrufen.

    Angenommen, die JS-Datei hat folgendes:

     var sayHello = function() {
      alert('Hello!');
    };
     

    Fügen Sie diese Datei jetzt wie folgt ein:

     <head>
      <script type="text/javascript" src="myscript.js"></script>
    </head>
     

    Und jetzt Ändern Sie Ihren Timeout-Code folgendermaßen:

     var auto_refresh = setTimeout(function() {  
      $('#scoreboard').fadeIn("slow");
      sayHello();
    }, 3000);
     

    Es ist eine gute Praxis, niemals eine Javascript-Datei hinzuzufügen. " do "stuff", denn wie ihr entdeckt habt, ist es schwer, es wieder so zu machen. Stattdessen sollten Funktionen oder Objekte definiert werden, die so oft aufgerufen werden können, wie Sie möchten.

    22 November 2011
    Alex Wayne
  • Ich stimme Squeegy zu, dass Sie als beste Lösung eine Funktion aufrufen möchten. Wenn Sie jedoch nicht der Autor des enthaltenen Skripts sind und eine Lösung finden müssen, würde ich ein paar Dinge vorschlagen:

    [BEARBEITEN 22. November 12:27]
    Nun, ich verstehe besser, dass die Seite, aus der Sie versuchen, zu ziehen, ein Skript ist, das document.write zurückgibt. Ich glaube, es gibt zwei Optionen . Ich habe sie mit einigen Details hier eingefügt und meinen ursprünglichen Beitrag unten für die Nachwelt hinterlassen.

    Option 1:

    • Erstellen Sie eine Seite in Ihrer Domäne, die das Skript enthält. Zum Beispiel könnte es als www.yourdomain.com/sportsnetwork/B87/ bezeichnet werden.
    • Erstellen Sie in der Funktion setInterval einen iframe mit dem Quellcode und fügen Sie ihn in Ihre Anzeigetafel <div>.

    Option 2:

    • Erstellen Sie eine Seite in Ihrer Domain, die das Sportnetzwerk analysiert .com-Seite, entfernen Sie document.write und geben Sie html zurück.
    • Erstellen Sie in der Funktion setIntercal eine Ajax-Anforderung, um die HTML-Datei abzurufen, und fügen Sie diese in Ihre Anzeigetafel <div> ein.

    Ursprüngliche Option, die nicht mit document.write funktioniert:

     var auto_refresh = setInterval(  
      function () {  
        $('#scoreboard').fadeIn("slow");
        var unique = Date.now();
        var scriptFile = document.createElement('script');
        scriptFile.type = 'text/javascript';
        scriptFile.async = true;
        scriptFile.src = 'http://www.sportsnetwork.com/aspdata/clients/sportsnetwork/pullouts/logoscores/cbaskscoreboard.aspx?team=B87&unique=' + unique;
        var s = document.getElementsByTagName('script')[0]; 
        s.parentNode.insertBefore(scriptFile, s);
      }, 3000);
     

    Dadurch wird der Seite alle 3 Sekunden ein neues Skript hinzugefügt. Der Browser wird denken, dass es sich aufgrund des unique -Tags um ein anderes Skript handelt. Ich denke, Sie müssen möglicherweise das Timing der Überblendung in Bezug auf das Neuladen des Skripts überarbeiten, abhängig von der jeweiligen Beziehung.

    23 November 2011
    Brett Pontarelli