2009-05-29 15 views
0

Wie mache ich es so, dass der Browser eine PHP-Seite aufruft und die Ergebnisse in einem div alle 10 Sekunden oder so veröffentlicht?Einfache JQuery Ajax Skript Frage

Danke. Ich lerne gerade jQuery.

Antwort

1

Dies sollte funktionieren:

function loadResults(){ 
    $('div.to.update').load('yourpage.php') 
    setTimeOut(arguments.callee, 10000) 
} 

loadResults() 

Wie es funktioniert:

$('div.to.update').load('yourpage.php') 

Diese Linie macht 'yourpage.php' einen Ajax-Aufruf und füllt die div mit den Ergebnissen dieser Seite (Anmerkung dass das Ergebnis yourpage des Aufrufs sollte nicht eine ganze Seite, sondern nur ein Ausschnitt)

setTimeOut(arguments.callee, 10000) 

setTimeOut Pläne sein ein Funktionsaufruf in der Zukunft, in diesem Fall 10 Sekunden. die Funktion, die man die Funktion selbst nennt, aus der Variablen 'Argumente', auf die jede Funktion Zugriff hat. Es ist wie eine rekursive Funktion, aber mit einer Verzögerung von 10 Sekunden.

Zuletzt rufen Sie die Funktion zum ersten Mal auf, um die Schleife zu starten.

EDIT:

Sie auch die Funktion mit setInterval() aufrufen können, wenn Sie später die Schleife stoppen müssen, gerade dies zu tun:

function loadResults(){ 
     $('div.to.update').load('yourpage.php') 
    } 

    var interval_id = setInterval(loadResults,10000) 

    // Later on when you want to stop the refresh... 

    clearInterval(interval_id) 
+0

das ist sehr elegant – chris

1

Sie benötigen einen periodischen Updater. Etwas wie:

function callMeAtInterval() 
{ 
    $.ajax({ 
        method: 'get', 
        url : 'status.php', 
        dataType : 'text', 
        success: function (text) { $('#updateMe').html(text); } 
       }); 

} 
//causes callMeAtInterval() to get called every 5 seconds. 
var holdTheInterval = setInterval(callMeAtInterval, 5000); 

jQuery $.ajax Funktion wird die Ausgabe der Ressource angegeben durch url, und der Erfolg Callback ermöglicht es Ihnen, eine Verarbeitung mit den Ergebnissen zu tun, in dem obigen Beispiel:

('#updateMe').html(text); 

füllt das Seitenelement der ID updateMe mit dem vom Server zurückgegebenen Text.

+0

+1 Spot auf, Sie schlagen mich dazu – bendewey

+0

Ich finde es erstaunlich, dass dies zwei downvotes bekommen könnte. Zwei! Ist das wirklich nicht hilfreich? – karim79

+0

Ich habe auch zwei Downvotes! WTF! –

0

Es ist erwähnenswert, dass setInterval diese Funktion ausführen wird jeder 5 Sekunden (im Beispiel von karim79) unabhängig vom Fortschritt der ausstehenden AJAX-Anfragen. Wenn die erste Anfrage 3 Sekunden dauert, sendet setInterval die nächste Anfrage 2 Sekunden später, nicht 5. Wenn Sie tatsächlich wünschen, dass zwischen einer erfolgreichen Aktualisierung und der nächsten Anfrage 5 Sekunden liegen, können Sie setTimeout innerhalb der success verwenden Rückruffunktion. Das sieht wie folgt aus:

function callMeAtInterval() { 
    $.ajax({ 
     method: 'get', 
     url : 'status.php', 
     dataType : 'text', 
     success: function (text) { 
      $('#updateMe').html(text); 
      setTimeout(callMeAtInterval, 5000); 
      } 
    }); 

} 

Der Nachteil dieses Ansatzes ist, dass man versagt SetTimeout bedeutet, dass der Abschnitt nicht wieder aufgefrischt werden.

+0

Dies ist meiner Meinung nach die beste Lösung! –