You are not logged in.

  • Login

1

Wednesday, April 7th 2010, 5:27pm

AJAX mit setInterval + variable Übergabe der URL aus Funktion

Verstehe net was falsch ist.
ich möchte den div halt aktualisieren alle XX sek. mit einer bestimten URL die über die funktion ja genutzt wird.
Die soll solange aktualisiert werden bis ich die funktion erneut aufrufe und sich die URL ändert. laufen tut das in etwas so:

link1 == Seite1
link2 == Seite2
link3 == Seite3

<div id="online"></div>

wenn ich nun zb.: auf link 1 klicke soll er die seite 1 anzeigen (soweit gehts auch) aber er soll auch den div alle XX Sek. aktualisieren. bis ich auf zb.: link 2 klicke ...
Wenn ich die URL direkt eingebe in die funktion loadData() geht es aber dann nur diese angegebende seite und nicht die ich per funktion aufrufe (mit dem link) .
Hoffe man versteht bisschen was ich meine =/

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function seiteladen(seitenurl)  
    {
      xhr = http();
      xhr.open("GET", seitenurl, true);
xhr.setRequestHeader("Conent-Type","application/x-www-form-urlencoded");
      xhr.onreadystatechange = datenAusgeben;
      xhr.send(null);
      loadData(seitenurl);
    }

function datenAusgeben()
 {
      if (xhr.readyState == 4) {
        var rueckgabe = xhr.responseText;
        document.getElementById("div").innerHTML = rueckgabe;
      }
    }

function loadData(url_abgabe)
{
     xhr.open('GET',url_abgabe, true);
     xhr.onreadystatechange = function () {
         if (xhr.readyState == 4) {
             document.getElementById("div").innerHTML = xhr.responseText;
         }
     };
     xhr.send(null);
}

// aktuelle Daten laden
loadData(url_abgabe);
// alle 5 Sekunden neue Daten holen
setInterval('loadData(\''+url_abgabe+'\')',2000);

2

Wednesday, April 7th 2010, 7:15pm

Hallo,
dann mach die url_abgabe doch zur globalen Variablen.
Dann kannst du sie jederzeit ändern und der Parameter entfällt beim Aufruf von loadData.

Falls du globale Variablen vermeiden willst, kannst du das ganze in eine Klasse packen. Eine Ansatz dazu findest du in diesem Wiki Artikel. Man müsste die Klasse nur um einen setter für die URL erweitern.
Mehrere DIV Container mit AJAX aktualisieren

3

Wednesday, April 7th 2010, 7:49pm

aber wenn ich die direkt als global variable mache ist sie ja fest dann kann ich sie ja nicht mit meinen links ändern.
oder verstehe ich etwas total falsch...?

wie gesagt soweit geht es ja wenn ich zb.:

Source code

1
2
3
4
5
6
7
function loadData()
{
     xhr.open('GET',seite.php, true);
}

loadData();
setInterval('loadData()',2000);

mache. Aber der div springt ja immer dann zur der seite wenn der interval läuft da er ja festen pfad hat. jedoch brauche ich das am besten wenn er die

Source code

1
2
3
4
5
6
7
8
9
function seiteladen(seitenurl)  
    {
      xhr = http();
      xhr.open("GET", seitenurl, true);
xhr.setRequestHeader("Conent-Type","application/x-www-form-urlencoded");
      xhr.onreadystatechange = datenAusgeben;
      xhr.send(null);
      loadData(seitenurl);
    }

läuft das er dann fest sagt die URL die er bei der funktion seiteladen() bekommt diese dann auch zu nutzen bei der Aktualisierung bis die funktion erneut aufgerufen wird und eine neue URL gibt.

Weis net wie ich das lösen soll ggf. meine versuche scheitern alle. Vielleicht könnte mir jemand beispiel geben oder mein Code überarbeiten mit kleiner erklärung. (will es ja auch verstehn net nur haben)

4

Wednesday, April 7th 2010, 9:23pm

dann machen wir die Variable einfach mal global.

Ändere folgende Zeilen
#0: var url_abgabe = 'abc.php';
#8: url_abgabe = seitenurl; loadData();
#19: function loadData()
#33: setInterval('loadData()',2000);

5

Thursday, April 8th 2010, 10:03am

Super scheint zu funktionieren.
Aber ich habe zb.: #8: url_abgabe = seitenurl;
auch versucht nur ging das nicht. Lag es daran das ich die variable nicht vorher global erstellt habe wie bei deinem: #0: var url_abgabe = 'abc.php'; ?
Dennoch vielen dank einfach klasse hier die hilfe =) und man kann einiges ganz einfach dazu lernen ^^

Social bookmarks