AJAX der Objektkiller?

tach Community…

folgender Effekt bringt mich zum rasen.

> index.php
jaaanz oben werden alle php kalssen includiert und instanziiert.
in der index.php existieren alle objekte und deren instanzen.
ich kann also fehlerfrfei darauf zugreifen.

jetzt inkludiere ich mit AJAX in eine div box eine
zweite php datei , die auf die oben erwaehnten instanzen zugreifen soll.
das problem: die instanz existiert nicht.undich verstehe nicht warum… da die php datei interpretiert wird. anscheinend gelten dann aber die instanzen nicht.

stand jemand auch schon mal vor dem problem ? kann man das umgehen?

grusz

PixelKoenig

Hi Pixelkoenig,
ich vermute mal einfach du lässt die PHP Datei per Javascript einlesen.
Wenn ich das richtig habe:
Dies geschieht aber nachdem die PHP-Datei (index.php) auf dem Server geparst wurde, ergo sind alle Informationen aus der index.php verarbeitet und werden dann nicht von der zu inkludierenden PHP genutzt.

ISt meine laienhafte Vermutung.

Gruß

Marcel

P. S. wie wird denn die zweite PHP per AJAX eingelesen?

tach PK,

vielleicht könntetst du auf diese Zeile:

jetzt inkludiere ich mit AJAX in eine div box eine zweite php datei

nochmal näher eingehen?

gruß
vbt

nochmal näher eingehen?

aber gern:

http.open("GET", "seite.php?" + Math.random(), true);
document.getElementById("Ausgabe").innerHTML=http.responseText;

das sind wohl die relevanten teile.

grusz
Pixel

hey PK,

Die Aufrufe von index.php und seite.php haben garnichts miteinander zu tun. index.php erstellt eine html seite, die an den Browser geschickt wird. Danach wird index.php beendet und die Objekte sind weg.
Von der Seite im Browser wird dann per ajax seite.php, ein von index.php völlig unabhägiges script, aufgerufen.
Wenn du in beiden Scripten auf die selben objekte zugreifen willst, muss das irgendwie über sessions geschehen.

gruß
vbt

ps.: falls du das mit ner Session machst und das gut klappt, kannste ja mal bescheid sagen :wink:

Hi Pixelkoenig,
die Einbndung erfolgt doch über JavaScript, oder?
wenn ich deinen Code bei mir mit JavaScript teste bekomme ich die Meldung das die Funktion http nicht existiert. Benötige ich bestimmte Voraussetzungen dafür?

Danke und Gruß

Marcel

http.open(„GET“, „seite.php?“ + Math.random(), true);
document.getElementById(„Ausgabe“).innerHTML=http.responseText;

tach vbt

tja. das habe ich mir auch schon gedacht… so im nachhinein…

ps.: falls du das mit ner Session machst und das gut klappt,
kannste ja mal bescheid sagen :wink:

neeee… bloss nich mit apache-sessions…
zum einem auf einem gemeinschaftsserver recht unsicher… und ausserdem erden die nicht ordentlich vom indianer weggeloescht. ich baue meine eigenen sessions… die dann ja dummerweise auf die art und weise nicht funktionieren.

ich werde mein projekt nicht komplett auf ajax umstellen. navigation unter ajax ist ja schon wegen dem zurueckbutton nicht so dolle. und zuviele workarounds will ich auch nicht basteln. ich verzichte auf die seitennavigation bei ajax und werde nur sporadisch an sinnvollen stellen die technologie nutzen…

grusz aus berlin

Pixel

Tach Marcel,

vbt hatte hier in einem Beitrag das Problem schon erfasst.
Zu Deiner Frage:
Es scheint so , als wuesstest du nicht so recht was es mit AJAX auf sich hat.

die Einbndung erfolgt doch über JavaScript, oder?

ja. richtig. Ajax ist 100% javaScript technologie.
durch das sogenannte httpXMLrequest objekt ist es moeglich inhalte nachzuladen ohne die seite neu abzuschicken. das ist mitunter sehr praktisch. kennst du googlemail? die arbeiten fast ausschliesslich mit AJAX.

AJAX ist nicht neu. Microsoft hats erfunden. Um damals die kommunikation mit Outlook wohl irgendwie zu optimieren.
Als man merkte dass das wohol ganz nuetzlich sei haben die anderen browserhersteller wie firefox nachgezogen. dies mal in fast richtiger kurzdarstellung.

es ist eine sehr interessante technologie, die fuer den user vieles vereinfacht. anwendungen koennen damit fast wie office offline applikationen programmiert werden.

web 2.0 ist da das zauberwort. web 2.0 beschreibt diese technologie.

wenn ich deinen Code bei mir mit JavaScript teste bekomme ich
die Meldung das die Funktion http nicht existiert. Benötige
ich bestimmte Voraussetzungen dafür?

nun. zuerst musst du dieses objekt erzeugen.
hierbei sei zu beachten, dass microsoft eine andere philosophie faehrt als der rest dies zu tun :

function start(param){
 // Initialisierung des XMLHttpRequest Objekts
 if (window.XMLHttpRequest) {
 http = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
 http = new ActiveXObject("Microsoft.XMLHTTP");
 }
 // Objekt nutzen:
 http.open("GET", param+".php?" + Math.random(), true);

// wenn status 4=loading complete schreibe inhalt von php seite in die // divbox mit der ID "AUSGABE"

if (http.readyState == 4) {
 document.getElementById("Ausgabe").innerHTML =
 http.responseText;
 window.clearTimeout(id);

}

das sollte dir einen ueberblick verschaffen

grusz

PixelKoenig

Hi, Pixelkoenig,

Es scheint so , als wuesstest du nicht so recht was es mit
AJAX auf sich hat.

Doch, AJAX ist mir schon ein Begriff und das Prinzip war/ist bekannt,
nur damit gearbeitet habe ich noch nicht.

nun. zuerst musst du dieses objekt erzeugen.

Was mir nicht bekannt war ist die Geschichte mir den Objekten.

Danke für deine ausführliche Info und den Quellcode,
werde das mal ein wenig testen.

Gruß

Marcel

function start(param){
// Initialisierung des XMLHttpRequest Objekts
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http = new ActiveXObject(„Microsoft.XMLHTTP“);
}
// Objekt nutzen:
http.open(„GET“, param+".php?" + Math.random(), true);

// wenn status 4=loading complete schreibe inhalt von php
seite in die // divbox mit der ID „AUSGABE“

if (http.readyState == 4) {
document.getElementById(„Ausgabe“).innerHTML =
http.responseText;
window.clearTimeout(id);

}

Hai nochmal,
habe dein Beispiel mal ausprobiert,
bis auf die Ausgabe klappts.

der http.readyState ist bei mir immer 1.

Die Datei die eingelesen werden soll:
test.php

<?php echo "TEST";<br />?\>

Würde ja gern im Netz nachsehen,
aber leider ist hier auf der Arbeit nur eingeschränktes Internet möglich (bin schon froh das www frei ist)

Vielleicht hast du noch nen Tipp für mich?

Danke, Marcel

P. S.
Quellcode:

 function start(){
 // Initialisierung des XMLHttpRequest Objekts
 if (window.XMLHttpRequest) {
 http = new XMLHttpRequest();
 }
 else if (window.ActiveXObject) {
 http = new ActiveXObject("Microsoft.XMLHTTP");
 }
 // Objekt nutzen:
 http.open("GET", "test.php", true);
 // wenn status 4=loading complete schreibe inhalt von php seite in die
 if (http.readyState == 4) {
 alert ('ready');
 document.getElementById('content').innerHTML = http.responseText;
 window.clearTimeout(id);
 }
 alert (http.readyState);
 }
[TEST](%23)

Hi Pixelkoenig,
habe gestern mal ein wenig gesucht und ein Script gefunden mit POST.

if (window.XMLHttpRequest) {
 req = new XMLHttpRequest();
 }
else if (window.ActiveXObject) {
 req = new ActiveXObject("Microsoft.XMLHTTP");
 }
\_filename="image.php";
\_text="test"
\_body="filename="+escape(\_filename)+"&content="+escape(\_text); &nbsp;
//req.onreadystatechange&nbsp;=&nbsp;handleStateChange; &nbsp;
req.open('POST',&nbsp;'test.jpg',&nbsp;true);&nbsp; &nbsp;
req.setRequestHeader('Content-Type','text/html'); &nbsp;
req.send(\_body);
document.getElementById("content").innerHTML=req.responseText;

Folgende Zeile verursacht eine Fehlermeldung:
req.onreadystatechange = handleStateChange;
daher habe ich Sie auskommentiert.

Das Script funktioniert, nur sind auch hier keine Daten vorhadnen (readystate=1).

Schreibe ich nun nach der Zeile req.send(_body);

if (req.readystate!=4) {
 alert (req.readystate);
 }
 alert (req.readystate);

bekomme ich beim ersten alert eine 1 und beim 2ten eine 4 anschließend die Ausgabe funktioniert.

Sprich, sobald eine Aktion vom User ausgefürht wird, geht’s, aber ich weiß nicht warum.
Hast du evtl noch eine Tip für mich?

Ganze habe ich im IE 6 getestet.

Danke vorab und Gruß

Marcel