Zee*_*ang 193 javascript php
如何从PHP调用JavaScript函数?
<?php
jsfunction();
// or
echo(jsfunction());
// or
// Anything else?
Run Code Online (Sandbox Code Playgroud)
以下代码来自xyz.html(在按钮单击时),它wait()在外部xyz.js中调用a .这会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;
}
}
Run Code Online (Sandbox Code Playgroud)
和wait.php
<?php echo "<script> loadxml(); </script>";
Run Code Online (Sandbox Code Playgroud)
其中loadxml()从另一个PHP文件调用代码的方式相同.
该loadxml()工作正常,否则,但它不会被调用我想要的方式.
Pet*_*ley 346
就PHP而言(或者实际上是一般的Web服务器),HTML页面并不比大字符串复杂.
您可以使用PHP等语言完成所有奇特的工作 - 从数据库和Web服务中读取所有这些 - 最终目标是完全相同的基本原则:生成一串HTML*.
在Web浏览器加载之前,您的大HTML字符串不会变得比这更特别.一旦浏览器加载页面,那么所有其他魔术就会发生 - 布局,盒子模型,DOM生成以及许多其他事情,包括JavaScript执行.
所以,你不"从PHP调用JavaScript",你"在输出中包含一个JavaScript函数调用".
有很多方法可以做到这一点,但这里有几个.
仅使用PHP:
echo '<script type="text/javascript">',
'jsfunction();',
'</script>'
;
Run Code Online (Sandbox Code Playgroud)
从php模式转到直接输出模式:
<?php
// some php stuff
?>
<script type="text/javascript">
jsFunction();
</script>
Run Code Online (Sandbox Code Playgroud)
您不需要返回函数名称或类似的东西.首先,停止手动编写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
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您在将函数名称从PHP发送回AJAX调用时已经死定,那么您也可以这样做.
$.get(
'wait.php',
{},
function(returnedData) {
// Assumes returnedData has a javascript function name
window[returnedData]();
},
'text'
);
Run Code Online (Sandbox Code Playgroud)
*或JSON或XML等.
GSt*_*Sto 84
我总是只是使用 echo "<script> function(); </script>";或类似的东西.你在技术上并没有在PHP中调用该函数,但这与你要获得的一样接近.
ber*_*zie 47
现在(2012年2月),有一个新功能.点击这里
代码示例(摘自网络):
<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 11
你不能.您可以从PHP 输出的HTML中调用JS函数,但这是一个完整的"更重要的事情.
如果你想将它回显以便以后执行,那就没关系
如果要执行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"); }');
Run Code Online (Sandbox Code Playgroud)
你可以在这里参考以获得进一步的参考: 什么是php v8js中的扩展?
如果你想执行HTML和JS并使用PHP中的输出http://htmlunit.sourceforge.net/是你的解决方案
多数民众赞成不可能.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\"";
?>
Run Code Online (Sandbox Code Playgroud)
我不接受反对者的答案。
如果你找到一些特殊的包可以让它工作,那么你可以自己做!所以,我不相信这些答案。
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>';
}
Run Code Online (Sandbox Code Playgroud)
排序 在使用函数“之前”声明该函数非常重要。(我不知道“before”是指“词汇上之前”还是“时间上之前”;在上面的示例代码中,两者都是。)