murder: Text ausführen

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

  1. 你好 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()

    再见,
     克里斯蒂安

    --
    http://wwwtech.de/
    WWWTech.de | Wayne Revived
    Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
    1. 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

      1. 你好 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.

        再见,
         克里斯蒂安

        --
        http://wwwtech.de/
        WWWTech.de | Wayne Revived
        Sobald dir ein Gedanke kommt, lache über ihn.
        1. Hi Christian,

          Dachte das hätte was mit der Kodierung des Files zu tun. :/
          Naja, jetzt funktionierts. :)

          Vielen Dank

      2. 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