Text ausführen
murder
- javascript
Hi,
Ich will mir eine Reihe Variablen per Ajax von nem php-script an ein Javascript übergeben.
Ich wollte das realisieren in dem ich einfach den Javascript-Code per echo ausgeben (also zb x = 100; z = 50;).
Leider weiß ich nicht wie ich nun diesen Text ausführen könnte.
Kann mir jemand helfen? Bin ich mit meinen Ansatz vill ganz auf dem Holzweg?
mfg
murder
你好 murder,
Kann mir jemand helfen? Bin ich mit meinen Ansatz vill ganz auf dem Holzweg?
Naja, ich würde zwar eher eine XML-Struktur liefern (die könntest du via getElementById() z. b. recht einfach auswerten), aber wenn du es wirklich so machen willst, gibt es eval()
再见,
克里斯蒂安
auch 你好
eval() hab ich schon gefunden
bei Ajax steht
»»
Sometimes the application is designed to send JavaScript code as a response. If the content type of the response matches the MIME type of JavaScript then this is true and Prototype will automatically eval() returned code. You don't need to handle the response explicitly if you don't need to.
»»
und das müsste doch heißen das mein text automatisch ausgeführt wird(oder? :P)
aber wenn ich die variable aufrufen will kommt nix
再见,
murder
你好 murder,
Sometimes the application is designed to send JavaScript code as a response. If the content type of the response matches the MIME type of JavaScript then this is true and Prototype will automatically eval() returned code. You don't need to handle the response explicitly if you don't need to.
»»
und das müsste doch heißen das mein text automatisch ausgeführt wird(oder? :P)
Nein, das heisst: wenn du die Antwort mit dem MIME-Typ text/javascript auslieferst, wird sie automatisch als JS ausgewertet.
再见,
克里斯蒂安
Hi Christian,
Dachte das hätte was mit der Kodierung des Files zu tun. :/
Naja, jetzt funktionierts. :)
Vielen Dank
Hallo Murder,
bei Ajax steht
Ah, es geht also um Prototype.
Sometimes the application is designed to send JavaScript code as a response. If the content type of the response matches the MIME type of JavaScript then this is true and Prototype will automatically eval() returned code. You don't need to handle the response explicitly if you don't need to.
Was die damit meinen ist, dass es beim Erstellen eines Prototype-Ajax-Request-Objektes die Option EvalJS mit möglichen Werten true und false gibt. Wenn die Option nicht explizit auf false gesetzt wird, wird ein true angenommen. Und wenn Du dann noch einen dieser MIME-Typen in HTTP-Antwort angibst ... application/ecmascript, application/javascript, application/x-ecmascript, application/x-javascript, text/ecmascript, text/javascript, text/x-ecmascript, oder text/x-javascript ... wird der Text mit eval() als Javascript ausgeführt. Das ist nicht so toll, wenn man da auch Funktionen und sonstigen aktiven Javascript-Krempel in der HTTP Response drin hat.
Für Dich spannender ist die auch im default auf true stehende Option EvalJSON. JSON ist eine Teilmenge von Javascript, im wesentlichen aus der JS-Schreibweise von Objekten, Arrays, Zahlen, Strings und Wahrheitswerten besteht. Die Schreibweise für die Daten, die Du übergeben willst, sähe dann so aus:
{ x : 100, z : 50 }
Sprich so, wie man Datenstrukturen in JS auch schreiben würde. Das Tolle an der Reduziertheit auf Datenstrukturen ist, dass da eher keine Funktionen oder ähnlich das Browserfenster veränderten Dinge mitgeliefert werden und vor allem dass evil eval() nicht zum Zuge kommt. Und für diese Datenstrukturen gibt es in vielen Programmiersprachen auch eingebaute Funktionen oder Bibliotheken mit diesen Funktionen. PHP hat seit Version 5.2.0 die Funktion json_encode, mit der Du z.B. ein PHP-Array Deiner Werte über die Leitung schicken könntest. Wenn Du dann noch vorher mit header() den Content-Type application/json angibst, dann könntest Du solch einen JS-Code schreiben:
~~~javascript
new Ajax.Request(url, {
method: 'get',
onSuccess: function(response) {
var obj = response.responseJSON; // responseJSON enthält ein JS-Objekt
tueWasMit(obj.x); // ... auf dessen Attribute man dann
tueWasAnderesMit(obj.z); // ... wie in JS üblich zugreifen kann
}
});
Tim