JavaScript DIV refreshen

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hallo,

ich habe ein super Stück Code gefunden, allerdings hab ich ein kleines Problem.
Und zwar habe ich einen DIV-Container, in den eine andere PHP-Datei per include eingebunden wird.
Diesen DIV-Container möchte ich ca. alle 10 Sekunden neu laden, da dort Werte aus einer Datenbank gelesen werden, die sich ständig ändern.
Ein kompletter meta-refresh per html kommt nicht in Frage (Formulare sind nach dem reload wieder leer usw.)

Hier mal der verkürzte Code:

HTML:
//index.php
//...html usw.
<head>
<script type="text/javascript">

			function Ajax()
			{
				var
					$http,
					$self = arguments.callee;

				if (window.XMLHttpRequest) {
					$http = new XMLHttpRequest();
				} else if (window.ActiveXObject) {
					try {
						$http = new ActiveXObject('Msxml2.XMLHTTP');
					} catch(e) {
						$http = new ActiveXObject('Microsoft.XMLHTTP');
					}
				}

				if ($http) {
					$http.onreadystatechange = function()
					{
						if (/4|^complete$/.test($http.readyState)) {
							document.getElementById('header').innerHTML = $http.responseText;
							setTimeout(function(){$self();}, 10000);
						}
					};
					$http.open('GET', 'header.php', true);
					$http.send(null);
				}

			}

		</script>
</head>
<body>
<script type="text/javascript">
  setTimeout(function() {Ajax();}, 10000);
</script>
<div id="header">
<?php include ("header.php"); ?>
</div>
</body>
//...

PHP:
//header.php
print_r($_SESSION);

Beim öffnen der Seite passt erstmal alles. Durch das print_r($_SESSION); sehe ich im DIV-Container das $_SESSION-Array. Die header.php passt also.
Nun dauert es 10 Sekunden und dann kommt folgender Fehler:
Code:
Notice: Undefined variable: _SESSION in H:\...\header.php on line 19
Zeile 19 ist die mit print_r($_SESSION);

Wie schaffe ich es, dass ich von dort auch auf die Session zugreifen kann?

Danke schonmal.
 
Zuletzt bearbeitet:
session_start() ?

macht ja sinn, wenn du die datei per include einbindest greift er auf die session der ursprünglichen seite zurück, wenn du aber per HTTP Request die seite neu lädst sieht das für den PHP interpreter wie ein neues script aus, also muss die session neu gestartet werden.
 
Stimmt macht Sinn wenn mans weiß^^

Code ergänzt und er funktioniert. Vielen Dank.

PHP:
//beim doppelten Starten einer Session kommt ein Fehler, deshalb das if
if (!isset($_SESSION)) {
  session_start();
}
 
ja, man lernt ja nie aus ;)
ist meiner meinung nach aber total bescheuert das er da nen fehler schmeißt......
der soltle dann einfach die aktuelle session, die schon läuft, weiter nutzen.

btw. würde ich lieber mit
PHP:
if(session_id() == "") {
session_start(),
}

testen, denn wenn keine session gestartet ist dann liefert session_id einen leeren String (wobei meiner meinung nach null sinnvoller wäre).
Ich hatte früher auch mit isset($_SESSION) geprüft, aber den array zwischendurch selber angelegt, weil ich auf $_SESSION zugegriffen habe bevor eine session gestartet war.

leider gibt es auch keine methode wie session_is_active() oder so :(
 
Die sollen bei der nächsten Version nen session_start_once() einführen :)

Naja normal passiert das ja nicht, das man vorher schon was reinschreibt. Aber ich habs sicherheitshalber mal umgebaut. Das wäre sonst wieder ein Fehler, den man ewig und 3 Tage sucht :lol:

Normal wäre false tatsächlich sinnvoller... (Geht natürlich auch so, aber mit false im "Fehlerfall" wäre es wesentlich eleganter)

leider gibt es auch keine methode wie session_is_active() oder so
Danach hab ich auch im Netz gesucht^^ Aber als ich nix gefunden hab, hab ich mir das halt schnell mit isset gebastelt.
 
session_start_once gefällt mir :D
aber hast du ja im prinzip gerade selber gebastelt.

PHP ist leider eine antike sprache und schleppt viele alt lasten mit sich rum, so gibt es z.b. functionen die ein und das selbe machen aber anders implementiert sind.
Und auch für AJAX anwendungen ist es absolut NICHT ausgelegt. man kann damit zwar arbeiten muss aber leider verdammt viel selber machen da es nicht möglich ist das PHP und JS zusammen arbeiten.
Das session System ist zwar recht sinnvoll, aber das man z.b. selber die session starten muss nervt schon gewaltig, man kann auch nur umständlich sachen im speicher liegen lassen um später wieder zu verwenden. Über OOP muss man in php eig nich reden, das ist nach wie vor schlecht umgesetzt.
Threads kanns auch nicht :(
Ud was am meisten nervt ist die dynamische schwache typisierung, aber naja genug gelästert, wünsch dir noch weiterhin viel erfolg.

P.S.
unter netbeans z.b. (aber eclipse sicher auch) kann man mit JDoc ähnlichen anweisungen der IDE mitteilen was für ein Typ von Variable eine function zurückgibt oder das sie evtl. exceptions schmeißt.
Enorm hilfreich wenn functionen Objekte zurück geben, dann lädt die IDE nämlcih die attribute und methoden und man kann per strg+leertaste durchblättern

z.b.

PHP:
/**
* @param bool irgendein parameter
* @throws IllegalArgumentException
* @return MyObjekt ein MyObjekt Objekt
*/
function xyz($i) {
 if(!$i) 
   throw new IllegealArgumentException("Is darf nicht false sein");
 return new MyObject($i);
}

wobei die @throws klausel keine gültige anweisung ist, imho aber die einzige möglichkeit den entwickler zu warnen das eine function eine exception auslösen kann.

Besonders hilfreich ist es wenn ein Array oder eine Collection von Objekten zurückgegeben wird, dann kann man einfach

@return MyObejkt[] machen und dann einfach über den Array iterieren.

das nur am Rand, hat mir schon sehr geholfen :)
 
Zuletzt bearbeitet:
Jop aber das könnte man in die offiziellen Funktionen mit aufnehmen^^

OOP in PHP, da legt man sich mehr Steine innen Weg als man gut macht finde ich...
Ist aber auch schön, in ner Variable einfach irgendwas speichern zu können ohne auf den Typ aufzupassen :) Dafür ists halt A*s*hlangsam^^

hm mit OOP in PHP hab ich nicht so arg viel Erfahrung. Ich kanns zwar aber würde nie im Leben damit was großartiges machen (außer es ist nur was kleines wo man das tatsächlich richtig sinnvoll anwenden kann, alles größere ist mir ein zu großes durcheinander...)

Exceptions brauch ich auch recht selten. Diese Problematik hatte ich deshalb noch nicht.
 
ich habe hier ein riesen projekt am laufen, das besteht atm aus knapp 30.000 zeilen code ind 220 datein, ohne OOP wäre ich noch mehr aufgeschmissen, ein spaß ist das trotzdem nicht. Für meine beachlor arbeit habe ich mir aber vorgenommen eine PHP erweiterng zu schreiben ;)

leider gibt es zu PHP kaum gute alternativen, ein Java programm kam nicht in frage da es von überall, auch vom handy, jederzeit ereichbar sein muss.

Ruby on rails ist eine reine zumutung und ASP einfach nicht mein fall.
Von Tomcat + java fang ich gar nicht erst an xD

das problem mit der schwachen typisierung ist halt aber unter anderem das eine Funktion ALLES und NICHTS zurückgeben kann.

Außerdem ist der speicherverbrauch einach nicht nachvollziehbar.
ich finde die siete nicht wieder, aber es gibt jemanden der hat sich die mühe gemacht und PHP mal auf herz und nieren getestet, da kamen mega komische ergebnisse bei raus. Und gerade bei Web anwendunge muss man doch ab und an mal auf den Speicher gucken....

ähh aber ich glaube wir sind hier bissl arg weit vom Thema abgekommen
 
Zuletzt bearbeitet:
Thema ist ja geklärt, von daher darf man abschweifen ;)

Wow so eine umfangreiche Arbeit muss man als Bachelor am Ende machen?
Wieviel Zeit haste dafür eingeplant?
Kannst das gerne auch per PN schreiben. Würde mich mal interessieren, weil ich vielleicht ähnliches vorhab.
 
Zurück
Oben