如何从PHP调用JavaScript函数?

Zee*_*ang 193 javascript php

如何从PHP调用JavaScript函数?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?
Run Code Online (Sandbox Code Playgroud)

以下代码来自xyz.html(在按钮单击时),它wait()在外部xyz.js中调用a .这会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;
  }
}
Run Code Online (Sandbox Code Playgroud)

wait.php

<?php echo "<script> loadxml(); </script>"; 
Run Code Online (Sandbox Code Playgroud)

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

loadxml()工作正常,否则,但它不会被调用我想要的方式.

Pet*_*ley 346

就PHP而言(或者实际上是一般的Web服务器),HTML页面并不比大字符串复杂.

您可以使用PHP等语言完成所有奇特的工作 - 从数据库和Web服务中读取所有这些 - 最终目标是完全相同的基本原则:生成一串HTML*.

在Web浏览器加载之前,您的大HTML字符串不会变得比这更特别.一旦浏览器加载页面,那么所有其他魔术就会发生 - 布局,盒子模型,DOM生成以及许多其他事情,包括JavaScript执行.

所以,你不"从PHP调用JavaScript",你"在输出中包含一个JavaScript函数调用".

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

仅使用PHP:

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;
Run Code Online (Sandbox Code Playgroud)

从php模式转到直接输出模式:

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>
Run Code Online (Sandbox Code Playgroud)

您不需要返回函数名称或类似的东西.首先,停止手动编写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
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您在将函数名称从PHP发送回AJAX调用时已经死定,那么您也可以这样做.

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

*或JSON或XML等.

  • 这家伙刚刚做了我一直在做的事情,直到现在这么清楚. (8认同)
  • @PeterBailey大多数人通常会侮辱这个人进行这项调查并将其留在那里.你实际上给了我很有建设性的帮助.所以谢谢 :) (4认同)
  • 当然还可以选择链接外部javascript文件来执行调用本身...这样就可以在JavaScript代码中保留JavaScript所属的位置.=) (2认同)
  • @NilsSens感谢您的提问.你仍然误解了一些基本的东西.PHP和客户端javascript不直接互相交互.HTTP总是在中间.即使有Ajax请求也是如此.重申我7年前在我原来的答案中所写的内容:当作为Web应用程序服务器运行时,所有PHP正在生成的是一串HTML,其中可能包含或不包含javascript. (2认同)

GSt*_*Sto 84

我总是只是使用 echo "<script> function(); </script>";或类似的东西.你在技术上并没有在PHP中调用该函数,但这与你要获得的一样接近.

  • 只需确保将javascript函数_before_放置在echoed脚本中,否则无法调用它. (12认同)

ber*_*zie 47

现在(2012年2月),有一个新功能.点击这里

代码示例(摘自网络):

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

?>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这需要在PHP安装中安装V8Js扩展. (3认同)

Mat*_*hen 11

你不能.您可以从PHP 输出的HTML中调用JS函数,但这是一个完整的"更重要的事情.

  • 那个例子是在HTML中使用click事件,而不是php.JavaScript是客户端,php是服务器端.你不能用PHP直接调用JavaScript. (2认同)

Pia*_*M4n 7

如果你想将它回显以便以后执行,那就没关系

如果要执行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"); }');
Run Code Online (Sandbox Code Playgroud)

你可以在这里参考以获得进一步的参考: 什么是php v8js中的扩展?

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


Daf*_*aff 6

多数民众赞成不可能.PHP是服务器端语言和JavaScript客户端,他们对彼此并不是很了解.您需要一个服务器端JavaScript解释器(如Aptanas Jaxer).也许你真正想要做的就是使用类似于Ajax的架构(JavaScript函数异步调用PHP脚本并对结果做一些事情).

<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\"";
?>
Run Code Online (Sandbox Code Playgroud)


Ric*_*mes 5

我不接受反对者的答案。

如果你找到一些特殊的包可以让它工作,那么你可以自己做!所以,我不相信这些答案。

onClick是涉及最终用户的拼凑,因此不可接受。

@umesh 很接近,但它不是一个独立的程序。这是这样的(改编自他的答案):

<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>';
}
Run Code Online (Sandbox Code Playgroud)

排序 在使用函数“之前”声明该函数非常重要。(我不知道“before”是指“词汇上之前”还是“时间上之前”;在上面的示例代码中,两者都是。)