如何从PHP调用JavaScript函数?

<?php

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

下面的代码来自xyz.html(单击按钮),它调用外部xyz.js中的wait()。这个wait()调用wait.php。

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

和wait.php

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

其中loadxml()以同样的方式从另一个PHP文件调用代码。

除此之外,loadxml()工作得很好,但它没有以我想要的方式调用。


当前回答

就PHP而言(或者实际上是一般的web服务器),HTML页面只不过是一个大字符串。

你可以用像PHP这样的语言做的所有花哨的工作——从数据库和web服务中读取等等——最终的目标是完全相同的基本原则:生成一个HTML*字符串。

你的大HTML字符串不会变得比这更特别,直到它被web浏览器加载。一旦浏览器加载了页面,所有其他神奇的事情就发生了——布局、框模型、DOM生成和许多其他事情,包括JavaScript执行。

因此,您不是“从PHP调用JavaScript”,而是“在输出中包含JavaScript函数调用”。

有很多方法可以做到这一点,但这里有几个。

只使用PHP:

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

从php模式切换到直接输出模式:

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

你不需要返回函数名或类似的东西。首先,停止手工编写AJAX请求。你这是在为难自己。使用jQuery或其他优秀的框架。

其次,要明白,一旦从AJAX调用接收到响应,就已经在执行javascript代码了。

下面是一个示例,我认为您正在使用jQuery的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
}

现在,如果您执意要将函数名从PHP发送回AJAX调用,也可以这样做。

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

*或JSON或XML等。

其他回答

你不能。你可以从PHP输出的HTML中调用JS函数,但这完全是另一回事。

像这样试试

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

你也可以试试这个:-

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

如果你想回显它以便以后执行,这是可以的

如果你想执行JS并在PHP中使用结果,请使用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"); }');

如需进一步参考,请参考: php v8js中的扩展是什么?

如果你想要执行HTML&JS并在PHP中使用输出http://htmlunit.sourceforge.net/是你的解决方案

我总是使用echo "<脚本>函数();> < /脚本”;或者类似的东西。从技术上讲,在PHP中没有调用函数,但这是最接近的方法。