如何从PHP调用JavaScript函数?

时间:2009-06-25 19:45:43

标签: php javascript

如何从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()工作正常,但不会按照我想要的方式调用。

12 个答案:

答案 0 :(得分:338)

就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等。

答案 1 :(得分:83)

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

答案 2 :(得分:46)

现在(2012年2月)有一个新功能。查看here

代码示例(摘自网络):

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

?>

答案 3 :(得分:13)

你做不到。您可以通过PHP从HTML 输出调用JS函数,但这是一个完整的“其他事情。”

答案 4 :(得分: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"); }');

您可以在这里参考以获得进一步的参考: What are Extensions in php v8js?

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

答案 5 :(得分: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\"";
?>

答案 6 :(得分:3)

PHP在服务器中运行。 JavaScript在客户端中运行。所以php无法调用JavaScript函数。

答案 7 :(得分:2)

你也可以尝试这个: -

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

答案 8 :(得分:2)

试试这个

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

答案 9 :(得分:1)

您可能无法直接执行此操作,但Xajax库非常接近您的需要。我将举例说明。这是网页上的一个按钮:

<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网站上,玩得开心!

答案 10 :(得分:0)

  

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

    function f() {
      //code
      alert("its calling from echo ");
    }

    echo "<td onclick='f();'>".Method calling."</td>";

答案 11 :(得分:0)

我不接受反对者的回答。

如果您找到了使它起作用的特殊包装,那么您可以自己做!所以,我不买那些答案。

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