it-swarm.com.de

Wie rufe ich eine JavaScript-Funktion von PHP aus auf?

Wie rufe ich eine JavaScript-Funktion von PHP aus auf?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?

Der folgende Code stammt von xyz.html (bei einem Klick auf eine Schaltfläche) und ruft ein wait() in einem externen xyz.js auf. Diese wait() ruft wait.php auf.

function wait() 
{
  xmlhttp=GetXmlHttpObject();
  var url="wait.php"; \
  xmlhttp.onreadystatechange=statechanged; 
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(null);
} 

function statechanged()
{ 
  if(xmlhttp.readyState==4) {
       document.getElementById("txt").innerHTML=xmlhttp.responseText;
  }
}

und wait.php

<?php echo "<script> loadxml(); </script>"; 

dabei ruft loadxml() auf dieselbe Weise Code aus einer anderen PHP Datei auf.

Die loadxml() funktioniert ansonsten einwandfrei, wird aber nicht so genannt, wie ich es möchte.

190
Zeeshan Rang

Für PHP (oder eigentlich für einen Webserver im Allgemeinen) ist eine HTML-Seite nichts komplizierteres als eine große Zeichenfolge.

All die fantastische Arbeit, die Sie mit Sprachen wie PHP machen können - Lesen aus Datenbanken und Webdiensten und all das - das ultimative Endziel ist genau dasselbe Grundprinzip: Generieren einer HTML-Zeichenfolge *.

Ihre große HTML-Zeichenfolge wird erst dann zu etwas Besonderem, wenn sie von einem Webbrowser geladen wird. Sobald ein Browser die Seite lädt, passiert dann die ganze andere Magie - Layout, Boxmodelle, DOM-Generierung und viele andere Dinge, einschließlich JavaScript-Ausführung.

Sie rufen also nicht "JavaScript von PHP aus auf", sondern fügen "einen JavaScript-Funktionsaufruf in Ihre Ausgabe ein".

Es gibt viele Möglichkeiten, dies zu tun, aber hier sind ein paar.

Mit nur PHP:

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;

Aus dem PHP-Modus in den direkten Ausgabemodus wechseln:

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>

Sie müssen keinen Funktionsnamen oder ähnliches zurückgeben. Hören Sie zunächst auf, AJAX Anforderungen von Hand zu schreiben. Du machst es dir nur schwer. Holen Sie sich jQuery oder eines der anderen hervorragenden Frameworks.

Zweitens sollten Sie verstehen, dass Sie bereits JavaScript-Code ausführen werden, sobald die Antwort vom Aufruf AJAX empfangen wird.

Hier ist ein Beispiel dafür, was Sie mit AJAX von jQuery machen

$.get(
    'wait.php',
    {},
    function(returnedData) {
        document.getElementById("txt").innerHTML = returnedData;

        //  Ok, here's where you can call another function
        someOtherFunctionYouWantToCall();

        // But unless you really need to, you don't have to
        // We're already in the middle of a function execution
        // right here, so you might as well put your code here
    },
    'text'
);

function someOtherFunctionYouWantToCall() {
    // stuff
}

Wenn Sie einen Funktionsnamen von PHP zurück an den AJAX -Aufruf senden möchten, können Sie dies ebenfalls tun.

$.get(
    'wait.php',
    {},
    function(returnedData) {
        // Assumes returnedData has a javascript function name
        window[returnedData]();
    },
    'text'
);

* Oder JSON oder XML usw.

342
Peter Bailey

Ich benutze immer nur echo "<script> function(); </script>"; oder ähnliches. Sie rufen die Funktion technisch nicht in PHP auf, aber das ist so nah, wie Sie es noch wollen.

84
GSto

Ab sofort (Februar 2012) gibt es dafür ein neues Feature. Überprüfen Sie hier

Codebeispiel (aus dem Internet entnommen):

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
  var_dump($e);
}

?>
47
bertzzie

Das kannst du nicht. Sie können eine JS-Funktion von HTML aus aufrufen ausgegeben von PHP, aber das ist eine ganz andere Sache.

13

Wenn Sie es für eine spätere Ausführung ausgeben möchten, ist es in Ordnung

Wenn Sie das JS ausführen und die Ergebnisse in PHP verwenden möchten, verwenden Sie V8JS

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');

Sie können hier als weitere Referenz verweisen: Was sind Erweiterungen in PHP v8js?

Wenn Sie HTML & JS ausführen und die Ausgabe in PHP http://htmlunit.sourceforge.net/ verwenden möchten, ist dies Ihre Lösung

7
Pian0_M4n

Das ist nicht möglich. PHP ist eine serverseitige Sprache und eine JavaScript-Clientseite und sie kennen sich nicht wirklich gut aus. Sie benötigen einen serverseitigen JavaScript-Interpreter (wie Aptanas Jaxer). Vielleicht möchten Sie tatsächlich eine Ajax-ähnliche Architektur verwenden (die JavaScript-Funktion ruft das Skript PHP asynchron auf und führt etwas mit dem Ergebnis aus).

<td onClick= loadxml()><i>Click for Details</i></td>

function loadxml()
{
    result = loadScriptWithAjax("/script.php?event=button_clicked");
    alert(result);
}

// script.php
<?php
    if($_GET['event'] == 'button_clicked')
        echo "\"You clicked a button\"";
?>
6
Daff

PHP läuft auf dem Server. JavaScript läuft im Client. Daher kann PHP keine JavaScript-Funktion aufrufen.

3
Daniel Moura

sie können dies auch versuchen: -

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>
2
umesh

versuche es so

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>
2
Vivek ab

Möglicherweise können Sie dies nicht direkt ausführen, aber die Xajax - Bibliothek entspricht in etwa Ihren Vorstellungen. Ich werde mit einem Beispiel demonstrieren. Hier ist eine Schaltfläche auf einer Webseite:

<button onclick="xajax_addCity();">Add New City</button> 

Unsere intuitive Vermutung wäre, dass xajax_addCity() eine Javascript-Funktion ist, oder? Richtig und falsch. Das Coole, was Xajax erlaubt, ist, dass wir keine JS-Funktion namens xajax_addCity() haben, sondern eine PHP -Funktion namens addCity(), die alles kann, was PHP tut!

<?php function addCity() { echo "Wow!"; } ?>

Denken Sie eine Minute darüber nach. Wir rufen praktisch eine PHP -Funktion aus Javascript-Code auf! Dieses stark vereinfachte Beispiel diente nur dazu, den Appetit anzuregen. Eine bessere Erklärung finden Sie auf der Xajax-Website. Viel Spaß!

1
Hamman Samuel

wenn Sie Methode in Echo aufrufen möchten, müssen Sie sie in einfache Anführungszeichen setzen:

    function f() {
      //code
      alert("its calling from echo ");
    }

    echo "<td onclick='f();'>".Method calling."</td>";
0
Adiii