我不知道我将如何实现这一目标,但是......
我有一个服务器端的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
答案 0 :(得分:3)
除非您在讨论某种形式的客户端PHP或服务器端JavaScript,否则您所指的内容将无效。
PHP在服务器端执行。
JavaScript在客户端执行。
不能在另一个上“调用方法”,因为在客户端调用JavaScript之前PHP已经执行了。
制作类似工作的唯一方法是为JavaScript提供一些方法来执行,然后通过AJAX调用将方法的结果发回服务器。
答案 1 :(得分:2)
从技术上讲,你可以做你想做的事。
$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页面。