kann man mit Ajax eine php Klasse aufrufen?
droom
- javascript
0 molily0 droom0 Edgar Ehritt1 Cheatah1 molily
0 Felix Riesterer
0 Edgar Ehritt0 suit
Hi folks,
ich habe so einen Aufruf:
xmlHttp.open('GET', 'http://meineseite.de/class.tx_newshide_pi2.php', true);
und class.tx_newshide_pi2.php ist eine Klasse mit einer Main-Funktion. Die Main-Funktion macht momentan nur ein return "test"; aber der Aufruf funktioniert nicht.
Wenn ich dagegen keine Klasse benutze und meine Datei class.tx_newshide_pi2.php z. B. nur ein echo "test"; ausgibt, dann kriege ich ein Ergebnis.
Darum meine Frage: Kann man mit Ajax auch Funktionen aus einer PHP-Klasse aufrufen? Wird die main() funktion aus der PHP Klasse/Datei nicht automatisch aufgerufen, wenn die Klasse/Datei aufgerufen wird?
vielen Dank,
droom
Hallo,
Kann man mit Ajax auch Funktionen aus einer PHP-Klasse aufrufen?
Wenn du ein PHP-Script schreibst, das genau dies tust: Ja, dieses Script kannst du per Ajax aufrufen, dann wird es ausgeführt und dessen Ausgabe steht dir im JavaScript zur Verfügung.
Wird die main() funktion aus der PHP Klasse/Datei nicht automatisch aufgerufen, wenn die Klasse/Datei aufgerufen wird?
Nein. Wieso auch? Wenn du einfach in einer Datei class XYZ { ... } notierst, wird damit nur die Klasse deklariert. Sofern du keine Instanz erzeugst, wird auch nicht der Konstruktor ausführt. Funktionen bzw. Konstruktor-Funktionen werden nur ausgeführt, wenn du sie ausdrücklich aufrufst bzw. mit new eine Instanz der Klasse erzeugst.
Mathias
Hi Mathias und danke für die Erklärung. Angenommen, ich rufe die Datei so:
if (xmlHttp) {
xmlHttp.open('GET', 'http://meineseite.de/class.tx_newshide_pi2.php', true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
document.getElementById("news").innerHTML=xmlHttp.responseText
}
};
xmlHttp.send(null);
}
Ich habe doch da keine Möglichkeit die Klasse zu instansiieren in JS.
Wenn du ein PHP-Script schreibst, das genau dies tust: Ja, dieses Script kannst du per Ajax aufrufen, dann wird es ausgeführt und dessen Ausgabe steht dir im JavaScript zur Verfügung.
wie kann ich denn die funktion main() von meiner Klasse dann in JS aufrufen?
vielen Dank,
droom
wie kann ich denn die funktion main() von meiner Klasse dann in JS aufrufen?
Dir steht die Nutzung und Verarbeitung der mit einer Anfrage übergebenen Variablen ($_GET,$_POST) selbstverständlich frei.
php:
class was_weis_ich{
function __construct(){
if(isset($_GET['test']) && $_GET['test']=='ja'){
this->main();
}
}
function main(){
echo 'huhu';
}
}
$a=new was_weis_ich();
Javascript:
xmlHttp.open('GET', 'http://meineseite.de/class.tx_newshide_pi2.php?test=ja', true);
Gruß aus Berlin!
eddi
Hi,
Ich habe doch da keine Möglichkeit die Klasse zu instansiieren in JS.
nein. Du hast mit AJAX die Möglichkeit[1], einen HTTP-Request durchzuführen. Nicht mehr und nicht weniger. Das ist bei GET exakt das selbe, als wenn Du die URL in die Adresszeile eingibst und Enter drückst.
Entsprechend muss der serverseitige Code aufgebaut werden.
wie kann ich denn die funktion main() von meiner Klasse dann in JS aufrufen?
Genau(!) so wie Du es beim Eingeben der URL in die Adresszeile tun würdest.
Cheatah
[1] Mit Beschränkungen wie z.B. der Same Origin Policy.
Hallo,
Ich habe doch da keine Möglichkeit die Klasse zu instansiieren in JS.
Wie gesagt - Mit XMLHttpRequest kannst du nichts anderes tun, als HTTP-Anfragen an den Webserver übermitteln und auf die Serverantworten zugreifen.
JavaScript und PHP haben überhaupt nichts miteinander zu tun: Wenn eine Anfrage an ein PHP-Script hereinkommt, startet der Webserver dieses. Das PHP-Script läuft dort ab, bis es sich beendet. Mögliche Ausgaben des Scriptes sendet der Webserver nach dessen Beendigung als HTTP-Antwort zurück an den Client-Rechner. Das ist meistens ein HTML-Dokument - kann aber auch reiner Text, ein Bild, JavaScript, ein XML-Dokument usw. sein.
Erst auf dem Client-Rechner, im Browser, kommt das JavaScript ins Spiel. JavaScript operiert auf Basis eines HTML-Dokuments. Mit JavaScript und XMLHttpRequest kannst du nun eine HTTP-Anfrage absenden. Wenn die Adresse auf ein PHP-Script zeigt, wird der Webserver das PHP-Script ausführen. Mehr kannst du mit JavaScript nicht machen, weil serverseitige und clientseitige Programmierung nicht ineinandergreifen - das heißt, nur über HTTP-Anfragen.
So erklärt sich, dass du mit JavaScript natürlich nicht irgendwelche PHP-Klassen instantiieren kannst. JavaScript und PHP sind eben getrennt - JS läuft auf dem Client, PHP auf dem Server. Und die einzige Möglichkeit, wie sie miteinander kommunizieren können, ist das Übertragungsprotokoll HTTP.
Wenn du ein PHP-Script schreibst, das genau dies tust: Ja, dieses Script kannst du per Ajax aufrufen, dann wird es ausgeführt und dessen Ausgabe steht dir im JavaScript zur Verfügung.
wie kann ich denn die funktion main() von meiner Klasse dann in JS aufrufen?
Soll ich den obigen Satz nochmal umformulieren Okay: Schreibe ein PHP-Script, das genau dies tut. Rufe dieses Script per Ajax auf, dann wird es ausgeführt. Dessen Ausgabe steht dir im JavaScript zur Verfügung. ;-)
Mathias
Lieber Mathias,
Nein. Wieso auch? Wenn du einfach in einer Datei class XYZ { ... } notierst, wird damit nur die Klasse deklariert. ...
also schreiben wir weiter, damit dem OP klar wird, wie das jetzt zu lösen ist:
Man braucht zwei PHP-Scripte auf dem Server. Im einen wird die Klasse definiert, die dann in einem anderen benutzt wird. Der Ajax-Call müsste dann auf das zweite PHP-Script "zielen", welches dann das erstere einbindet und dann eine Instanz der dort definierten Klasse erzeugt und etwas damit anstellt.
Im JavaScript steht dann:
xmlHttp.open('GET', 'http://meineseite.de/ajax-antworter.php', true);
Im PHP-Script "ajax-antwort.php" steht dann:
require_once('class.tx_newshide_pi2.php'); // ab jetzt kann man die Klasse nutzen
$instanz = new TxNewsHidePi2(); // oder wie die Klasse auch immer exakt heißt...
$instanz->methode_a(); // tut etwas mit dieser Instanz
$instanz->methode_ausgabe(); // könnte eine Methode mit einem echo darinnen sein...
@droom: Klarer geworden?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo,
Darum meine Frage: Kann man mit Ajax auch Funktionen aus einer PHP-Klasse aufrufen?
Nein. An einem xml-Request-Objekt ist nichts anders, als an einem Aufruf mit dem Browser. Ein Browser kann auch nur nach einer Resource einen Server fragen. Der führt im Falle von PHP diese dann aus. Was beim Aufruf mittels Browser von http://meineseite.de/class.tx_newshide_pi2.php ausgegeben wird, empfängt auch das xml-Request-Objekt in Javascript. (Ausnahmen kann es geben, die mir aber hier nicht relevant erscheinen.)
Wird die main() funktion aus der PHP Klasse/Datei nicht automatisch aufgerufen, wenn die Klasse/Datei aufgerufen wird?
Soweit das nicht von der Konstruktormethode bewerkstelligt wird, nein.
Gruß aus Berlin!
eddi
xmlHttp.open('GET', 'http://meineseite.de/class.tx_newshide_pi2.php', true);
zur info: der name scheint eine typo3-extension-klasse zu sein (genauer gesagt ein frontend-plugin), die sollten normalerweise im typo3conf/ext/ usw liegen und funktionieren ohne die typo3-core-funktionen nicht, da sie diese nur erweitern (datenbankverbindung usw wird nicht funktionieren) ausser es hat jemand am framework vorbeiprogrammiert