从PHP脚本中调用JavaScript函数是否可行?如何实现?

4

我不知道如何实现这一点,但是...

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

解决方案:

使用 Rhino,您可以以命令行脚本方式运行JavaScript。首先,下载并提取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

2
为什么你确切地需要这个? - jwueller
很难找到一个PHP等效于这个特定的JavaScript库。 - Andrew
2
好的。那个特定的JS库是什么? - shamittomar
1
JavaScript的目的不是在浏览器中运行。它比PHP在许多方面都是一种更好的语言。我运行基于事件驱动的服务器,使用JavaScript编写图像处理程序。 - Dan Grossman
如果你告诉我们是哪个JS库,我相信我们一定可以找到在服务器上运行的东西。 - Dan Grossman
显示剩余2条评论
7个回答

3
除非你是在谈论某种形式的客户端PHP或服务器端JavaScript,否则你所提到的内容是行不通的。
PHP在服务器端执行。
JavaScript在客户端执行。
一个不能“调用”另一个方法,因为PHP已经在客户端调用JavaScript之前执行完毕。
唯一使这样的事情起作用的方法是提供一种方式,让JavaScript执行并通过AJAX调用将方法结果返回给服务器。

我指的是从命令行脚本中运行PHP和JavaScript服务器端。 - Andrew

2

从技术上讲,您可以按照您想要的方式进行操作。

  • 找到一个命令行JS解释器,这可能是一个很好的起点
  • 编写一个JS脚本,接受输入并生成输出
  • 开始在php中执行您要做的任何事情
  • 使用$output = system('./jsInterpreter -param value', $retval);或类似的内容
  • 对数据进行处理

编辑:Rhino似乎非常适合您的需求:

预定义属性

在shell中执行的脚本可以访问一些顶级对象的附加属性。 arguments

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


好的...现在我们有所进展了。这是我需要做的事情的方向。 - Andrew

1

我觉得这是你想要的 http://devzone.zend.com/article/4704。用PECL和SpiderMonkey在PHP中使用JavaScript

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

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

谢谢,但我不想去折腾PECL和编译/安装。尽管如此,你的答案似乎是一个非常合适的解决方案。 - Andrew

0

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

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

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

需要在服务器端运行PHP和JavaScript,不会生成任何客户端(浏览器)代码。 - Andrew
那么您正在寻找服务器端的 JavaScript 实现?请查看 CommonJS:http://en.wikipedia.org/wiki/CommonJS - wajiw

0
如果你想让这个工作起来,你需要通过JavaScript使用Ajax来发起调用。
这是我做的:
首先,创建一个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 页面。


这个问题中没有客户端。 - Ruan Mendes

0

PHP代码在服务器上执行,输出结果发送到浏览器。浏览器按照PHP提供的脚本执行。PHP无法调用JavaScript函数,只能向浏览器提供包含JavaScript的页面,由浏览器执行。

该脚本可以包含一个AJAX回调函数,告诉浏览器发起一个新的请求到服务器的PHP脚本 - 但这构成了一个单独和不同的请求到服务器。


需要在服务器端运行PHP和JavaScript,不会生成任何客户端(浏览器)代码。 - Andrew

0

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


仅翻译文本内容:脚本不会在客户端运行 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接