【问题标题】:invoke a javascript function through php [duplicate]通过php调用javascript函数[重复]
【发布时间】:2015-06-01 18:13:54
【问题描述】:

我想从 php 调用一个 javascript 函数,但是 php 脚本包含在 javascript 之前。

<script type="text/javascript">
function myjsfunction(){
//js code
}
</script>

【问题讨论】:

  • to invoke a javascript function from php 是什么意思?
  • 意思是从php调用一个javascript函数

标签: javascript php function


【解决方案1】:

这不是一个坏问题,但是当涉及到客户端-服务器和一般基于 Web 的应用程序如何工作的基本原则时,它可能是基于一些误解。

我将使用以下示例来说明您的问题: 您正在编写基于 Web 的水壶控制器,并且您希望在水壶达到沸腾温度时在控制器的网页上显示通知,以便可以通过消息通知用户可以提供茶水。

一般情况如下:

  1. PHP 代码在服务器端执行(例如,Web 服务器 执行它并仅将执行输出传递给客户端)
  2. JavaScript 代码在客户端执行(通过网络浏览器
  3. Web 服务器和 Web 浏览器通信通常使用 HTTP 协议完成,使用一组请求(由客户端发送)和应答(由服务器发送)。

客户端发送请求,服务器响应。您想要做的是服务器向客户端发送请求以执行脚本。这在某些事件驱动或异步 JS 框架的上下文中是有意义的。我会考虑一下,即使我不明白你到底想要达到什么目的。

您有以下选择:

典型的“同步”编程答案(对于水壶以外的情况) - 如果您的执行条件在解释 PHP 脚本时已知,则在响应/输出页面中动态生成/包含 JS,就像马特建议。示例:


if (sessionActive()) {
$pageScript .= 'function runOnLoad() { alert("hit"); }
               window.onload = runOnLoad; '
    }
// ... do the rest
echo $pageScript;

异步执行或面向事件的执行是指您不知道页面呈现时的条件(主要 PHP 脚本执行) - 这是问题中更有趣或不重要的部分。

选项 A:使用 AJAX 调用持续轮询服务器。这是蹩脚、缓慢且效率极低的。

选项B:使用AJAX调用轮询服务器,服务器需要时间来响应请求(PHP脚本循环轮询或等待直到水壶准备好,然后发送响应)。巨大的缺点是服务器和客户端都有脚本执行超时。这仅适用于有限的情况。

选项 C:实现面向连接的协议,该协议保持与服务器的持续连接 - 例如WebSockets,它允许在每次从服务器接收信息时调用事件处理程序。这需要更多的技术实力,但它可能是最有效和可扩展的解决方案。

【讨论】:

    【解决方案2】:

    为了与来自 Javascript 的后端进行通信,我们传统上使用 AJAX。 (更多关于这个主题的信息在这里,http://www.w3schools.com/php/php_ajax_php.asp)。

    但是由于它使用长期轮询(因此您有 javascript 请求某个 PHP 调用,每次说,500 毫秒)它在处理大量访问者时会产生大量负载,除此之外它不是完全实时的,您可能需要考虑使用允许双向通信的 websocket。
    http://en.wikipedia.org/wiki/WebSocket

    【讨论】:

      【解决方案3】:

      PHP 是一种服务器端脚本语言。 JS(在您的情况下)是一种客户端脚本语言。 JS 在客户端页面加载“之后”执行。因此,您可以在 PHP 中包含两个脚本,并在页面加载结束时调用它们(onload 函数)。

      【讨论】:

        【解决方案4】:

        有点奇怪的问题...

        如果您想在页面加载时调用 JS 函数,您可以在页面加载时从您的 PHP 脚本创建的页面中将其添加到 DOM 的底部...例如...

        <script>
        window.onload = function() {
          yourFunction(param1, param2);
        };
        </script>
        

        【讨论】:

          猜你喜欢
          • 2013-06-03
          • 2012-09-30
          • 1970-01-01
          • 2012-09-12
          • 1970-01-01
          • 2012-12-30
          • 1970-01-01
          • 2014-02-01
          • 2012-11-29
          相关资源
          最近更新 更多