Hoe een JavaScript-functie aanroepen vanuit PHP?

Hoe een JavaScript-functie aanroepen vanuit PHP?

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

De volgende code is van xyz.html(met een klik op de knop) roept het een wait()aan in een externe xyz.js. Deze wait()roept wait.php aan.

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;
  }
}

en wait.php

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

waar loadxml()op dezelfde manier code uit een ander PHP-bestand aanroept.

De loadxml()werkt verder prima, maar het wordt niet genoemd zoals ik het wil.


Antwoord 1, autoriteit 100%

Wat PHP betreft (of eigenlijk een webserver in het algemeen), is een HTML-pagina niets ingewikkelder dan een grote string.

Al het mooie werk dat je kunt doen met taal als PHP – lezen uit databases en webservices en zo – het uiteindelijke doel is exact hetzelfde basisprincipe: een reeks HTML* genereren.

Je grote HTML-tekenreeks wordt niet specialer dan dat totdat deze wordt geladen door een webbrowser. Zodra een browser de pagina laadt, dangebeurt alle andere magie: lay-out, dingen in doosmodellen, DOM-generatie en vele andere dingen, waaronder JavaScript-uitvoering.

Dus u “roept JavaScript niet aan vanuit PHP”, u “neemt een JavaScript-functieaanroep op in uw uitvoer”.

Er zijn veel manieren om dit te doen, maar hier zijn er een paar.

Alleen PHP gebruiken:

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

Ontsnappen van php-modus naar directe uitvoermodus:

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

Je hoeft geen functienaam of iets dergelijks terug te geven. Stop allereerst met het handmatig schrijven van AJAX-verzoeken. Je maakt het jezelf alleen maar moeilijk. Download jQuery of een van de andere uitstekende frameworks die er zijn.

Ten tweede, begrijp dat u al javascript-code gaat uitvoeren zodra het antwoord is ontvangen van de AJAX-oproep.

Hier is een voorbeeld van wat ik denk dat je doet met jQuery’s AJAX

$.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
}

Als je vastbesloten bent om een functienaam van PHP terug te sturen naar de AJAX-aanroep, kun je dat ook doen.

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

* Of JSON of XML enz.


Antwoord 2, autoriteit 23%

Ik gebruik altijd gewoon echo "<script> function(); </script>";of iets dergelijks. Technisch gezien roep je de functie niet aan in PHP, maar dit komt het dichtst in de buurt.


Antwoord 3, autoriteit 14%

Per nu (februari 2012) is hier een nieuwe functie voor. Kijk hier

Codevoorbeeld (van internet):

<?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);
}
?>

Antwoord 4, autoriteit 3%

Dat kan niet. Je kunt een JS-functie aanroepen vanuit HTML uitgevoerddoor PHP, maar dat is heel wat anders.


Antwoord 5, autoriteit 2%

Als je het wilt herhalen voor latere uitvoering, is dat oké

Als je de JS wilt uitvoeren en de resultaten in PHP wilt gebruiken, gebruik dan 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"); }');

U kunt hier verwijzen voor verdere referentie:
Wat zijn extensies in php v8js?

Als u HTML&JS wilt uitvoeren en de uitvoer in PHP wilt gebruiken http://htmlunit.sourceforge.net/ is jouw oplossing


Antwoord 6, autoriteit 2%

Dat is niet mogelijk. PHP is een server-side taal en JavaScript-client-side en ze weten niet echt veel van elkaar. U hebt een serverzijdige JavaScript-interpreter nodig (zoals Aptanas Jaxer). Misschien wil je eigenlijk een Ajax-achtige architectuur gebruiken (JavaScript-functie roept PHP-script asynchroon aan en doet iets met het resultaat).

<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\"";
?>

Antwoord 7

probeer zo

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

Antwoord 8

je kunt deze ook proberen:-

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

Antwoord 9

PHP draait op de server. JavaScript wordt uitgevoerd in de client. Dus php kan geen JavaScript-functie aanroepen.


Antwoord 10

Je kunt dit misschien niet rechtstreeks doen, maar de bibliotheek Xajaxkomt aardig in de buurt van wat jij wil. Ik zal het demonstreren met een voorbeeld. Hier is een knop op een webpagina:

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

Onze intuïtieve gok zou zijn dat xajax_addCity()een Javascript-functie is, toch? Nou ja, goed en fout. Het leuke van Xajax is dat we geen JS-functie hebben genaamd xajax_addCity(), maar wat we wel hebben is een PHP-functie genaamd addCity()die dat wel kan wat PHP ook doet!

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

Denk er even over na. We roepen virtueel een PHP-functie op vanuit Javascript-code!
Dat te vereenvoudigde voorbeeld was gewoon om de eetlust op te wekken, een betere uitleg staat op de Xajax-site, veel plezier!


Antwoord 11

Ik accepteer de antwoorden van de nee-zeggers niet.

Als je een speciaal pakket vindt waardoor het werkt, je kunt het zelf doen! Dus ik koop die antwoorden niet.

onClickis een kludge waarbij de eindgebruiker betrokken is, en daarom niet acceptabel.

@umesh kwam in de buurt, maar het was geen op zichzelf staand programma. Hier is zo’n (aangepast van zijn antwoord):

<script type="text/javascript">
function JSFunction() {
    alert('In test Function');   // This demonstrates that the function was called
}
</script>
<?php
// Call a JS function "from" php
if (true) {   // This if() is to point out that you might
              // want to call JSFunction conditionally
    // An echo like this is how you implant the 'call' in a way
    // that it will be invoked in the client.
    echo '<script type="text/javascript">
         JSFunction();
    </script>';
}

Other episodes