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