Aktualiserung ohne Seite neu zu laden...

Kufstein

B1G-Software-Kunde
Hallo Leute,

Als erstes mal wollte ich mich noch einmal bedanken, bei alles was ihr mir geholfen habt. :] :]

Jedoch habe ich noch eine kleine Frage.

in meiner Communnity kann man an einen anderen User messages senden.

Oben gibts dann den Link Messages ([Anzahl der neuen Messages])

die neuen messages werden jedes mal aus der MySql Datenbank bei jedem Seitenaufruf gezählt ....

Jedoch muss der User jedes mal die Seite neu Laden, dass er weiß ob er eine neue Message hat, oder nicht.

Jetzt zu meiner Frage:

Ist es nicht nicht irgendwie möglich, dass wenn ich eine Seite (z.B. data.php) mit
PHP:
<?
session_start()
echo newmssages();
?>
erstelle diese per Javascript oder so auszulesen, und jede Minute auf der Seite die Messages ohne die ganze Seite zu aktualisieren, anzuzeigen.


Schon mal Vielen Dank.
 
Huhu,
red doch mal mit Peer-Mario der bastelt grad mit Ajax rum.

Karsten

Ich habe mit ihm geredet ... er hilft mir sobald er weitergekommen ist..

Gibt es nicht noch eine andere Möglich keit ein Teil einer Seite nach einer Gewissen Zeit zu Verändern ohne Sie Neu laden zu müssen ????
 
Gibt es nicht noch eine andere Möglich keit ein Teil einer Seite nach einer Gewissen Zeit zu Verändern ohne Sie Neu laden zu müssen ????

Ich habe eine Lösung gefunden (mittels Sajax gebaut) und sie funktioniert. Zu sehen hier

Erste Anzeige dauert ca. 2 - 3 sek durch den connect zum entfernten Server. Titelanzeige aktualisiert sich automatisch, ohne Seitenrefresh.

Gruß Peer-Mario
 
Erste Anzeige dauert ca. 2 - 3 sek durch den connect zum entfernten Server.

Sowas würde da gut kommen:

spinner.gif


Oder "Bitte warten..."

:]
 
Ich habe eine Lösung gefunden (mittels Sajax gebaut) und sie funktioniert. Zu sehen hier

Erste Anzeige dauert ca. 2 - 3 sek durch den connect zum entfernten Server. Titelanzeige aktualisiert sich automatisch, ohne Seitenrefresh.

Gruß Peer-Mario

Kannst du mir dafür den Code geben ?

Also ich will im von einer Datei (messagenew.php) die einen Wert (Bsp. 5 ) ausgibt, und diesen Wert auf einer anderen Seite wieder einfügen.
 
Jaja.. das gute alte "AJAX" :tongue:
Hier ein Beispiel:

JS-Code:
Code:
fuinction ajax(code){
if (window.ActiveXObject) {
			try {
				xmlHttp= new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
				}
			}
		} else if (window.XMLHttpRequest) {
			try {
				xmlHttp= new XMLHttpRequest();
			} catch (e) {
			}
		}
		if (xmlHttp) {
			xmlHttp.open('POST', 'index.php?action=checkCode&code='+code, true);
			xmlHttp.onreadystatechange = processCheckCode;
			xmlHttp.send(null);
		}
}
function processCheckCode() {
	if (xmlHttp.readyState == 4) {
		result = xmlHttp.responseText;
		if(result == 'true'){
		        document.getElementById('blubb').innerHTML = 'okay'; //oder was auch immer ^^
		}
	}
}

PHP-CODE z.B.:
PHP:
if(isset($_REQUEST['code'])){ echo 'true';}

Musst es dir halt noch bissel anschauen, habe ich aus einem großem Stück von meinem Code rausgeschnitten :baby:

LG, Martin
 
BAHNHOF !!!!

Ich habe noch nie was mit AJAX gemacht...

Wie bekomme ich es hin das er des auließt und irgendwo wieder einfügt. .....


Hat da jemand ne kurze Anleitung ...
 
Hallo Kufstein,

Code kommt :)

Aber sooooooooo kompliziert wie martin, ist das bei mir nicht :)

Die Funktion, die für das Update zuständig ist:
(radio.class ist eine Klasse aus der Aratix-Scriptsammlung)

PHP:
#
  require_once("Sajax.php");
  sajax_init();                    // Klasse initialisieren 
  sajax_export("update");          // PHP update Funktion 
  sajax_handle_client_request();   // Client Requesthandler 

  function update() {
    include("radio.class.php");          // Klasse einbinden
    $radio = new Radio;                  // Klasse initialisieren

    $radio->set_host("xxx");            // ServerURL
    $radio->set_port("xxx");             // Serverport
    $radio->set_pass("xxx");            // Passwort für den Adminbereich des Servers
    $radio->set_serv("shoutcast");   // Legt die Serversoftware fest: "icecast" oder "shoutcast"
    $radio->init();  
 
  // Ausgabe der Titelinformationen festlegen

    $songinfo = 'Ihr hört: '.$radio->title.'   von '.$radio->artist;     
    $ret = "document.getElementById('titelinfo').innerHTML='{$songinfo}'";
    return $ret;
  }

und dann die Ausgabe im div Element der HTML-Ausgabe

<div id= 'titelinfo'><b></div>

Und hier der JS-Code dazu:

PHP:
  <script language="javascript"> 
  <!-- // hide from older browsers 
      <? sajax_show_javascript();
         ?> 
         function refreshTimer(t) {
          setTimeout("update()",t*1000);
      }
      function update() {
           x_update(update_cb);
      }
      function update_cb(result) {
         eval(result);
         refreshTimer(3); // 30 seconds
      }   
  //--> 
  </script>

Das Laden erfolgt dann mittel <body onload="refreshTimer(1);">

Sajax.php schicke ich Dir auch noch.

Gruß Peer-Mario
 
Last edited:
Hallo Kufstein,

Code kommt :)

Aber sooooooooo kompliziert wie martin, ist das bei mir nicht :)

Die Funktion, die für das Update zuständig ist:
(radio.class ist eine Klasse aus der Aratix-Scriptsammlung)

PHP:
#
  require_once("Sajax.php");
  sajax_init();                    // Klasse initialisieren 
  sajax_export("update");          // PHP update Funktion 
  sajax_handle_client_request();   // Client Requesthandler 

  function update() {
    include("radio.class.php");          // Klasse einbinden
    $radio = new Radio;                  // Klasse initialisieren

    $radio->set_host("xxx");            // ServerURL
    $radio->set_port("xxx");             // Serverport
    $radio->set_pass("xxx");            // Passwort für den Adminbereich des Servers
    $radio->set_serv("shoutcast");   // Legt die Serversoftware fest: "icecast" oder "shoutcast"
    $radio->init();  
 
  // Ausgabe der Titelinformationen festlegen

    $songinfo = 'Ihr hört: '.$radio->title.'   von '.$radio->artist;     
    $ret = "document.getElementById('titelinfo').innerHTML='{$songinfo}'";
    return $ret;
  }

und dann die Ausgabe im div Element der HTML-Ausgabe

<div id= 'titelinfo'><b></div>

Und hier der JS-Code dazu:

PHP:
  <script language="javascript"> 
  <!-- // hide from older browsers 
      <? sajax_show_javascript();
         ?> 
         function refreshTimer(t) {
          setTimeout("update()",t*1000);
      }
      function update() {
           x_update(update_cb);
      }
      function update_cb(result) {
         eval(result);
         refreshTimer(3); // 30 seconds
      }   
  //--> 
  </script>

Das Laden erfolgt dann mittel <body onload="refreshTimer(1);">

Sajax.php schicke ich Dir auch noch.

Gruß Peer-Mario



Okay vielen Dank ...

wenn die Datei nicht zu gross ist, dann poste Sie doch hier. ansonsten kannste mir auch per mail an claudio@q-radio.eu schicken... Vielen Dank
 
Vielen Dank .. ich habe jetzt nach der Aratix-Scriptsammlung gegooglet aber nur das gefunden.
http://sourceforge.net/project/down...ch&filename=aratix-0.2.2beta9.tar.gz&11646062


In Dem Archiv ist aber niergens eine radio.class.php.... Kannst du mir vielleicht erklären wie ich damit auch andere Dateien Auslesen kann, oder so ????

EDIT: Ich habe jetzt die Radio.class.php gefunden .. doch leider funktionierts bei mir nicht ....

Ich habe die Daten angepasst, den Script kopiert und mit <div id= 'titelinfo'><b></div> porbiert den Titel einzufügen ... aber er zeigt nichts an ...


Jemand ne Idee ...
 
Last edited:
Hallo Kufstein,

ich werde Dir noch einmal erklären, wie das Ganze funktioniert, so schwer ist das doch nicht.

1. Sajax
Du bindest die Sajaxfunktion ein, initialisierst diese und gibst Ihr bekannt, welche PHP-Funktion Du zum Update nutzen möchtest. In meinem Beispiel nennt sich die Funktion update.

2. Die Update Funktion
In diesem Fall macht die Funktion nichts anderes, als mir den Titel und den Interpreten des aktuell gespielten Songs zurück zu geben.
Du musst hier DEINEN eigenen Code schreiben. Du möchtest ja die Anzahl der neues Messages anzeigen.

Achtung Pseudocode:
PHP:
function update() {
  global $sql; //falls Du vorhandene sql klassen nutzen möchtest
  $sql = "select messages from massagetable where message = nicht_gelesen AND username = user_um den_es_geht";
  $result = mysql_query($sql) OR die(mysql_error()); 
  $ret = "document.getElementById('titelinfo').innerHTML='{$[COLOR="Blue"]newmsgs[/COLOR]}'"; 
  return $ret;  
}

3. Javascript
Hier definierst Du die die Zeit, nach wieviel sekunden die Funktion update wieder aufgerufen werden soll.

4. Die Ausgabe der Information, die von der Funktion update geliefert wird
Die Ausgabe erfolgt in diesem div Element, welches irgendwo auf Deiner Seite mit eingebunden werden muss.

<div id= 'newmsgs'></div>

Du kannst das Ganze einfach mal testen, indem Du in die Funktion update einfach mal folgendes schreibst:

$newmsgs = "Das hier wird ausgegeben";
$ret = "document.getElementById('titelinfo').innerHTML='{$newmsgs}'";
return $ret;

Jetzt ändert sich zwar nicht der Wert, aber Du kannst zumindest sehen, was die Funktion zurückgibt und wo es bei dir auf der Seite dargestellt wird.

Gruß Peer-Mario
 
Last edited:
Es funktioniert leider nicht ...

ich habe folgende Datei
PHP:
<html>

<head>
<title>Testseite</title>


<?

require_once("Sajax.php");
  sajax_init();                    // Klasse initialisieren 
  sajax_export("update");          // PHP update Funktion 
  sajax_handle_client_request();   // Client Requesthandler 
function update() {
$newmsgs = "Das hier wird ausgegeben";
$ret = "document.getElementById('titelinfo').innerHTML='{ $newmsgs}'";
return $ret;
}
?>

</head>

<body>

<div id="newmsgs"></div>
<div id=newmsgs></div>
<div id= 'newmsgs'></div>
<div id="titelinfo"></div>

<div id=titelinfo></div>
<div id= 'titelinfo'></div>
</body>

</html>


muss ich noch irgendwas in der Sajax.php ändern oder so?

Bsp: http://q-radio.eu/qradio/test.php
 
Eine ID ist einmalig... Und du weist eine ID gleich 3 Divs zu. Hol dir mal den Firefox und öffne die JS-Konsole :baby:
 
Kann auch nicht funktionieren da Du nirgends die Funktion update überhaupt aufrufst.

Gruß Peer-Mario

PHP:
<?
  require("Sajax.php");
  sajax_init();            
  sajax_export("update");
  sajax_handle_client_request(); 

  function update() {
    $newmsgs = "Das hier wird ausgegeben";
    $ret = "document.getElementById('titelinfo').innerHTML='{$newmsgs}'";
    return $ret;
  } 
?>
<html>
<head>
  <script language="javascript">
      <? sajax_show_javascript(); ?>
      function refreshTimer(t) {
          setTimeout("update()",t*1000); 
      }
      function update() {
           x_update(update_cb); 
      }
      function update_cb(result) {
         eval(result);
         refreshTimer(30);
      }
  </script>
</head>
<body onload="refreshTimer(10);">
<div id="titelinfo"></div>
</body>
</html>
 
Last edited:
Das funktioniert soweit ...



Kann ich eingendlich auch 2 Funktionen irgenwie laden ...

Also so dass wenn einmal die Anzahl der Nacrichten aktualisiert worden sind und der Wert über 1 beträgt die funktion changeTitle("Neue Nachricht") aufgerufen wird ???


Schon mal vielen Dank
 
Back
Top