是否可以从PHP脚本中包含并调用JavaScript函数?如何?

时间:2010-12-07 20:24:53

标签: php javascript

我不知道我将如何实现这一目标,但是......

我有一个服务器端的PHP CLI脚本。它将从命令行运行。我的PHP脚本需要调用JavaScript库中的函数并捕获返回值。我需要找到一种运行JavaScript服务器端的方法。我怎样才能做到这一点?

解决方案:

使用Rhino,您可以run JavaScript as a command line script。首先,download and extract Rhino。然后,假设您的脚本如下所示:

PHP:

<?php
# myscript.php
$pathToRhinoJar = './rhino1_7R2/js.jar';
$javascriptFile = './test.js';
$output = shell_exec("java -jar $pathToRhinoJar $javascriptFile command line arguments");
echo "Response from javascript:\n $output";

JavaScript的:

/* test.js */
for (i in arguments) {
  print(arguments[i])
}

这将是结果:

$ php ./myscript.php
Response from javascript:
command
line
arguments

7 个答案:

答案 0 :(得分:3)

除非您在讨论某种形式的客户端PHP或服务器端JavaScript,否则您所指的内容将无效。

PHP在服务器端执行。

JavaScript在客户端执行。

不能在另一个上“调用方法”,因为在客户端调用JavaScript之前PHP已经执行了。

制作类似工作的唯一方法是为JavaScript提供一些方法来执行,然后通过AJAX调用将方法的结果发回服务器。

答案 1 :(得分:2)

从技术上讲,你可以做你想做的事。

  • 找一个命令行JS解释器,这可能是一个很好的starting point
  • 创建一个接受输入并生成输出的JS脚本
  • 开始做你在php中做的任何事情
  • 抛出$output = system('./jsInterpreter -param value', $retval);或类似的
  • 使用数据执行某些操作

编辑:Rhino似乎完全符合您的需求:

  

预定义属性

     

在shell中执行的脚本可以访问顶级对象的一些其他属性。   参数

     

arguments对象是一个数组,包含调用shell时在命令行中给出的所有参数的字符串。

答案 2 :(得分:1)

我认为这就是你要找的http://devzone.zend.com/article/4704。在PHP中使用JavaScript与PECL和SpiderMonkey

这个例子甚至没有接近测试,但我认为应该引导你朝着正确的方向发展。

-- funcs.js
function add(a,b) {
  return a +b;
}

-- use-js-funcs.php
<?php

// create JavaScript context
$js = new JSContext();

$js_code = file_get_contents('func.js');

// define Script code
$js_code.= "\n add(5)";

// evaluate script and display result, 
// my guess is that evaluateScript returns the
// result of the last statement that was executed
echo $js->evaluateScript($script);
?>

答案 3 :(得分:0)

PHP只能执行预处理功能,因此我认为在页面中调用JavaScript函数的唯一方法是打印出JavaScript调用:

?>
<script>
 functionToCall();
</script>
<?PHP

在该functionToCall中,您可以使用AJAX函数或表单提交将数据发送回您的PHP代码进行处理。

答案 4 :(得分:0)

PHP在您的服务器上执行,输出发送到浏览器。浏览器执行PHP提供的脚本。不,PHP无法调用JavaScript函数 - 它只能为包含浏览器将执行的JavaScript的浏览器提供页面。

此脚本可能包含一个AJAX回调,告诉浏览器向服务器PHP脚本发起新请求 - 但这构成了对服务器的单独且不同的请求。

答案 5 :(得分:0)

脚本是否需要在客户端运行?您可以编写一个在页面加载后运行并调用JS库的函数,然后通过XHR调用将返回值发送到您的脚本。您还可以设置超时以使函数运行,并在指定的时间段后执行此操作。

答案 6 :(得分:0)

如果你想要这个,你将不得不使用Ajax通过JavaScript发起呼叫。

这就是我的所作所为:

首先,创建一个PHP文件,完成你需要做的所有工作,然后让它回显一个简单的结果集。类似的东西:

echo 'true';

关键是要简单。如果您需要的不仅仅是用空格,管道或昏迷描述每个结果,那么您可以稍后将其分解为数组。

其次,您需要使用ajax进行javascript调用。这是我的所作所为:

var result = null;
var scriptUrl = "your-php-page.php";
$.ajax({
   url: scriptUrl,
   type: 'get',
   dataType: 'html',
   async: false,
   success: function(data) {
       result = data;
   }
});
return result;

然后,您可以使用返回的数据执行任何操作。如果需要,您甚至可以将其发送到另一个PHP页面。