How to call a JavaScript function from PHP?

How to call a JavaScript function from PHP?

How to call a JavaScript function from PHP?
loadxml(); “;

where loadxml() calls code from another PHP file the same way.
The loadxml() is working fine otherwise, but it is not being called the way I want it.

Solutions/Answers:

Solution 1:

As far as PHP is concerned (or really, a web server in general), an HTML page is nothing more complicated than a big string.

All the fancy work you can do with language like PHP – reading from databases and web services and all that – the ultimate end goal is the exact same basic principle: generate a string of HTML*.

Your big HTML string doesn’t become anything more special than that until it’s loaded by a web browser. Once a browser loads the page, then all the other magic happens – layout, box model stuff, DOM generation, and many other things, including JavaScript execution.

Related:  How to unbind a listener that is calling event.preventDefault() (using jQuery)?

So, you don’t “call JavaScript from PHP”, you “include a JavaScript function call in your output”.

There are many ways to do this, but here are a couple.

Using just PHP:

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

Escaping from php mode to direct output mode:

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

You don’t need to return a function name or anything like that. First of all, stop writing AJAX requests by hand. You’re only making it hard on yourself. Get jQuery or one of the other excellent frameworks out there.

Secondly, understand that you already are going to be executing javascript code once the response is received from the AJAX call.

Here’s an example of what I think you’re doing with 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
}

Now, if you’re dead-set on sending a function name from PHP back to the AJAX call, you can do that too.

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

* Or JSON or XML etc.

Related:  How do I get the max value of scrollLeft?

Solution 2:

I always just use echo "<script> function(); </script>"; or something similar. you’re not technically calling the function in PHP, but this as close as your going to get.

Solution 3:

Per now (February 2012) there’s a new feature for this. Check here

Code sample (taken from the web):

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

?>

Solution 4:

You can’t. You can call a JS function from HTML outputted by PHP, but that’s a whole ‘nother thing.

Solution 5:

If you want to echo it out for later execution it’s ok

If you want to execute the JS and use the results in PHP use 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"); }');

You can refer here for further reference:
What are Extensions in php v8js?

If you want to execute HTML&JS and use the output in PHP http://htmlunit.sourceforge.net/ is your solution

Related:  Javascript: final / immutable global variables?

Solution 6:

Thats not possible. PHP is a Server side language and JavaScript client side and they don’t really know a lot about each other. You would need a Server sided JavaScript Interpreter (like Aptanas Jaxer). Maybe what you actually want to do is to use an Ajax like Architecture (JavaScript function calls PHP script asynchronously and does something with the result).

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