如何从 PHP 调用 JavaScript 函数?

IT技术 php javascript
2021-01-09 07:49:59

如何从 PHP 调用 JavaScript 函数?

<?php

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

以下代码来自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;
  }
}

等待.php

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

whereloadxml()以相同的方式从另一个 PHP 文件调用代码。

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

6个回答

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

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

在 Web 浏览器加载它之前,您的大 HTML 字符串不会变得比这更特别。一旦浏览器加载页面,所有其他的魔法发生-布局,盒模型的东西,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 等。

这个家伙刚刚让我一直在做的一切变得如此清晰。
2021-03-12 07:49:59
@NilsSens 感谢您的提问。你在这里仍然误解了一些基本的东西。PHP 和客户端 javascript 不直接交互。HTTP 总是在中间。即使使用 Ajax 请求也是如此。重申我 7 年前在原始答案中所写的内容:当用作 Web 应用程序服务器时,PHP 所做的只是生成一串 HTML,其中可能包含也可能不包含 javascript。
2021-03-12 07:49:59
当然,也可以选择链接到外部 javascript 文件中,该文件本身进行调用...这样您就可以将 JavaScript 保留在它所属的位置,在 JavaScript 代码中。=)
2021-03-17 07:49:59
@PeterBailey 大多数人通常会因为提出这个问题而侮辱这个人,然后就这样了。你实际上给了我非常有建设性的帮助。所以谢谢 :)
2021-03-19 07:49:59
这是行不通的。我试过他们两个。我的程序的后续是,从 .html(单击按钮)转到外部 .js 函数,该函数加载 php 文件(使用 xmlhttp=GetXmlHttpObject();var url="phpwithmysqlwait.php"; xmlhttp.onreadystatechange=statechanged ; xmlhttp.open("GET", url, true); xmlhttp.send(null); ) 和我的 php 调用 <?php echo "<script> loadxml(); </script>"; ?> 其中 loadxml 以相同的方式调用另一个 php。否则 loadxml() 工作正常,但没有按照我想要的方式调用它。你能提出一些建议吗
2021-03-27 07:49:59

我总是只使用echo "<script> function(); </script>";或类似的东西。从技术上讲,您不是在 PHP 中调用该函数,但这与您将要获得的非常接近。

@alper - 不可以。使用 AJAX 或 xhr 将数据发送回服务器,尽管它不会转到 PHP 的那个实例。
2021-03-10 07:49:59
只需确保将 javascript 函数放在回显脚本之前,否则无法调用它。
2021-03-14 07:49:59
我们可以将 的输出返回echo到 中的变量中PHP吗?
2021-04-09 07:49:59

现在(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);
}

?>
请注意,这需要在 PHP 安装中安装 V8Js 扩展。
2021-04-02 07:49:59
这可能不完全符合原始问题的用例,但按照问题标题,这个答案应该有更多的选票。
2021-04-08 07:49:59

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

好吧,我可以像这样调用 JS 函数:echo "<td onClick= loadxml()><i>Click for Details</i></td>";.... 但我现在不想点击任何东西. 我只是想让我的 php 用任何事件调用一个 JS 函数。
2021-03-29 07:49:59
该示例使用 HTML 中的 click 事件,而不是 php。JavaScript 是客户端,php 是服务器端。不能用 PHP 直接调用 JavaScript。
2021-04-08 07:49:59

如果您想将其回显以供以后执行,则可以

如果要执行 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"); }');

您可以在此处参考以获取进一步参考: What are Extensions in php v8js?

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