如何从PHP调用JavaScript函数?

如何从PHP调用JavaScript函数?

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

下面的代码是从xyz.html (在一个button上点击)调用外部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页面并不比一个大string复杂。

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

你的大HTMLstring不会变得比这个更特别,直到它被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 do // 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等

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

现在(2012年2月)有一个新function。 在这里检查

代码示例(取自networking):

 <?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 输出的HTML中调用一个JS函数,但是这是完全没有的事情。

那是不可能的。 PHP是一个服务器端语言和JavaScript客户端,他们并不真正了解对方。 你需要一个服务器端JavaScript解释器(如Aptanas Jaxer)。 也许你真正想要做的就是使用像Architecture这样的Ajax(JavaScript函数asynchronous地调用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\""; ?> 

如果你想回显出来供以后执行,那就好了

如果你想执行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/是你的解决scheme

PHP在服务器上运行。 JavaScript在客户端运行。 所以PHP不能调用JavaScript函数。

你也可以试试这个:

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

你可能不能直接做到这一点,但Xajax库是非常接近你想要的。 我将用一个例子来演示。 这是网页上的button:

 <button onclick="xajax_addCity();">Add New City</button> 

我们直觉的猜测是xajax_addCity()是一个Javascript函数,对吗? 那么,对与错。 Xajax允许的很酷的事情是,我们没有任何称为xajax_addCity() JS函数,但是我们所做的是一个名为addCity()的PHP函数,它可以执行任何PHP操作!

 <?php function addCity() { echo "Wow!"; } ?> 

考虑一下。 我们几乎从JavaScript代码调用PHP函数! 这个过分简化的例子只是为了刺激胃口,更好的解释是在Xajax网站上,玩得开心!

如果你想在echo中调用方法,你必须把它们放在单引号中:

  function f() { //code alert("its calling from echo "); } echo "<td onclick='f();'>".Method calling."</td>"; 

试试这个

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