• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mti zeitsteuerung

hansi3000

Neues Mitglied
Bin ein abspuluter Anfänger, und habe mir folgendes Ausgedacht (Naja, aus Beispielen gebastelt):

HTML:
<?php session_start();
$md5ip = md5($_SERVER['REMOTE_ADDR']);
include 'db.inc.php';
include 'conf.inc.php';
include 'class.inc.php'; 
?>
    <html>
        <head>
            <link rel="stylesheet" href="screen.css" type="text/css"></link>
            <script type="text/javascript" src="jquery.js"></script>
            <script type="text/javascript"/>
                // Deine Ajax-Funktion
                function updateDiv()
                {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php', function () {
                     var deinTimer = window.setTimeout(updateDiv(), 5000);
                  });
                }
                updateDiv();
            </script>
        </head>
        <body name="body">
            <div id="h"></div>
        </body>
    </html>
Es funzt jedoch nciht, kann mir jmd helfen?

mfg hansi3000
 
Werbung:
Werbung:
Ja, die Fehlerkonsole hilft dir.
JQuery unterdrückt (leider) einige Fehlermeldung (Wenn zum Beispiel ein Element mit dem Selector nicht existiert).

@hansi
Dein Code ist bis auf eine Kleinigkeit richtig.
Du musst dir forstellen, dass das HTML von Oben nach Unten geladen wird. Zuerst der HTML-Tag, Dann der Head-tag, dann der Body-Tag und alles halt von außen nach innen.
Jetzt sagst du in deinem Kopf-Bereich, dass Etwas im Body Bereich verändert werden soll. Und zwar das Element mit der Id "h".
Das Problem ist, dass dieses Element noch garnicht geladen wurde. Somit wird das Element auch nicht gefunden.
Du kannst dem Script jedoch sagen: "Führe erst aus, wenn das Dokument geladen ist"
Dafür gibt es diese jQuery Funktion

Code:
$(document).ready(function() {
   // Alles was ausgeführt werden soll sobald das Dokument geladen wurde
});

Dazwischen würde dann dein Funktionsaufruf kommen.
Der zweite Fehler den du machst ist bei setTimeout.
Hier willst du ja, dass updateDiv alle 5 Sekunden ausgeführt wird.
Die Funktion benötigt als ersten Parameter jedoch die Funktion und nicht den Return des Aufrufs :)
Dies erreichst du, indem du die Klammern danach wegnimmst und die Funktion als variable behandelst.
Code:
var deinTimer = window.setTimeout(updateDiv, 5000);

Für deinen Fall würde sich wohl auch eher setinterval raten.
Dieses ruft nach einem bestimmten Intervall eine Funktion auf.
SELFHTML: JavaScript / Objektreferenz / window
Anstatt wie in dem Beispiel von selfhtml kannst du anstatt "Funktionsname()" auch Funktionsname schreiben.
Hoffe ich konnte dir dabei helfen :)
 
Nichtsdestotrotz hilft die Fehlerkonsole, die hilft immer.
 
Danke, jetzt sieht mein Script wie folgt aus:

HTML:
<?php session_start();
$md5ip = md5($_SERVER['REMOTE_ADDR']);
include 'db.inc.php';
include 'conf.inc.php';
include 'class.inc.php'; 
?>
    <html>
        <head>
            <link rel="stylesheet" href="screen.css" type="text/css"></link>
            <script type="text/javascript" src="jquery.js"></script>
            <script type="text/javascript"/>
                // Deine Ajax-Funktion
                $(document).ready(function updateDiv() {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php', function () {
                     var deinTimer = window.setTimeout(updateDiv, 500);
                  });
                });
            </script>
        </head>
        <body name="body">
            <div id="h"></div>
        </body>
    </html>
Aber funktionieren tut es irgendiwe immer noch nicht, wobei ich in meiner Fehlerkonsole, (danke Struppi :D) sehe das die Anfrage mit HTTP 200 abgeschlossen wurde.
Es wird ncihts ausgegeben :(

warum?

mfg hansi3000
 
Werbung:
Die Fehlerkonsole zeigt dir den http Status an? Dann benutzt du etwas anderes als was ich meine.
 
Danke, jetzt sieht mein Script wie folgt aus:

HTML:
<?php session_start();
$md5ip = md5($_SERVER['REMOTE_ADDR']);
include 'db.inc.php';
include 'conf.inc.php';
include 'class.inc.php'; 
?>
    <html>
        <head>
            <link rel="stylesheet" href="screen.css" type="text/css"></link>
            <script type="text/javascript" src="jquery.js"></script>
            <script type="text/javascript"/>
                // Deine Ajax-Funktion
                $(document).ready(function updateDiv() {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php', function () {
                     var deinTimer = window.setTimeout(updateDiv, 500);
                  });
                });
            </script>
        </head>
        <body name="body">
            <div id="h"></div>
        </body>
    </html>
Aber funktionieren tut es irgendiwe immer noch nicht, wobei ich in meiner Fehlerkonsole, (danke Struppi :D) sehe das die Anfrage mit HTTP 200 abgeschlossen wurde.
Es wird ncihts ausgegeben :(

warum?

mfg hansi3000

Die Funktion updateDiv gibts nun ja auch nicht mehr bei dir ;)

Code:
<script type="text/javascript"/>
                // Deine Ajax-Funktion
                function updateDiv()
                {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php', function () {
                     var deinTimer = window.setTimeout(updateDiv, 5000);
                  });
                }
                $(document).ready(function(){
                  updateDiv();
                });
            </script>


-----

Edit:
Die wohl schönere Methode wäre so:
Code:
<script type="text/javascript"/>
                // Deine Ajax-Funktion
                function updateDiv()
                {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php');
                }
                $(document).ready(function(){
                  window.setInterval(updateDiv, 5000);
                });
            </script>
 
Die Funktion updateDiv gibts nun ja auch nicht mehr bei dir ;)
Doch die gibt es, das ist eine Besonderheit von JS, du kannst auch quasi anonyme Funktionen bennen.

Aber das Konstrukt ergint keine Logik und vor allem macht es auch nichts ausser sich ständig selbst aufrufen, d.h. es macht genau das was Hansi programmiert hat

EDIT: Ok, ich bin kein jquery Experte, .load() – jQuery API soll das DIV füllen, wenn das nicht passiert stimmt was nicht.
 
Werbung:
Doch die gibt es, das ist eine Besonderheit von JS, du kannst auch quasi anonyme Funktionen bennen.

Aber das Konstrukt ergint keine Logik und vor allem macht es auch nichts ausser sich ständig selbst aufrufen, d.h. es macht genau das was Hansi programmiert hat

EDIT: Ok, ich bin kein jquery Experte, .load() – jQuery API soll das DIV füllen, wenn das nicht passiert stimmt was nicht.

Oh ich hab das "function updateDiv {" nicht mehr gelesen.
Und niemand hatte in hansis Variante das Script das erste mal angestoßen. Deswegen ist einfach nichts passiert. Mit meiner Variante sollte es funktoniert (denke ich)
 
Werbung:
O.K., jetzt wirds komisch, mein Quelltext sieht nun wiefolgt aus, aber es geht immer noch nichts.

Meine index.php:

HTML:
<?php session_start();
$md5ip = md5($_SERVER['REMOTE_ADDR']);
include 'db.inc.php';
include 'conf.inc.php';
include 'class.inc.php'; 
?>
    <html>
        <head>
            <link rel="stylesheet" href="screen.css" type="text/css"></link>
            <script type="text/javascript" src="jquery.js"></script>
            <script type="text/javascript"/>
                // Deine Ajax-Funktion
                function updateDiv()
                {
                  $('#h').load('http://www.hansi3000.bplaced.net/get.php');
                }
                $(document).ready(function(){
                  window.setInterval(updateDiv, 500);
                });
            </script>
        </head>
        <body name="body">
            <div id="h"></div>
        </body>
    </html>

Und das erste mla die get.php :D : (ACHTUNG, seeeeeeehr umfangreich ;))

PHP:
<?php
    echo 'Test';
?>

Hoffe auch jetzt wieer um Hilfe.

mfg hansi3000.

PS: Nur so zur Info, ich nutzer Firefox 5.0 Beta
 
Werbung:
Ich hab mal die Doku der load methode angeguckt. Dort steht als Zusätzliche Info:
Additional Notes:


  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.
Somit lass das http Zeug weg und nehm den relativen Pfad von der aufrufenden Datei. heisst wen du dich hier befindest
http://www.hansi3000.bplaced.nethttp://www.hansi3000.bplaced.net

Dann mach als load nur: 'get.php'
 
Werbung:
http://www.hansi3000.bplaced.net
funktioniert doch einwandfrei.

Ich würde noch darauf achten, die Seite nicht im Quirksmode darzustellen, damit wirst du früher oder später Probleme bekommen.

Ausserdem findest du in der FEHLERkonsole drei Meldungen, die Fehler im CSS betreffen.
 
Zurück
Oben