我是Wordpress和Woocommerce的新手。我对Wordpress中的jquery几乎没有疑问。说我有一个功能
function test(){
alert("test");
<?php
error_log("Test ---------------------------- ", 0);
?>
}
和一个按钮:
<input type="button" id="btnclick" onclick="test();" value="Test" />`
错误日志在页面加载时打印,但在点击时不打印。但我想只在用户点击按钮时才在php块中执行代码。有没有办法实现这一目标?在此先感谢!
答案 0 :(得分:3)
jPO已经解释了如何以一种好的方式解决这个问题,但我想我应该解释为什么会这样。
PHP在服务器上执行。页面一旦发送到客户端,PHP就不再存在了。 JavaScript发生在客户端上,只要用户正在查看网页就可以执行。由于他们没有在同一时期生活,他们彼此不了解,不能以这种方式混合。
当您在浏览器中访问该页面时,浏览器会向服务器发送请求。在服务器上,PHP解释器遍历所请求页面的代码,执行<?
和?>
之间的所有内容。它不明白它周围的其他东西是什么 - 它可能是HTML,JS,纯文本,任何东西,PHP解释器都不知道也不关心。这就是它在页面加载时写入错误日志的原因。
当PHP解释器完成时,它生成了一个如下所示的文档:
function test(){
alert("test");
}
发送到客户端,当按下按钮时,JS(没有任何写入错误日志的指令)在客户端上运行。
答案 1 :(得分:2)
不可能那样。如果你愿意的话。你需要像php中的ajax方法,你可以调用。假设你的项目根目录中有一个名为ajax.php的文件,你可以在那里定义一个名为test()的函数,然后你必须有一个$ _REQUEST转换器,它调用你的函数test(),所以ajax。 php看起来像这样
<?php
// checks if you sent a parameter named method and calls the method
// if you provide parameter named params it will send them too
if(isset($_REQUEST)){
if(isset($_REQUEST["params"]))
ajax($_REQUEST["method"],$_REQUEST["params"]);
else
ajax($_REQUEST["method"]);
}
function ajax($function,$data = null){
$function($data);
}
function test(){
error_log("Test ---------------------------- ",0);
}
你的ajax看起来像这样
function test(){
$.ajax({
url:"ajax.php",
data:{
method:"test"
}
});
}
希望有所帮助