我的PHP:
<?php
function myFunc($echo) {
//this js will print display the value of "myvar"
$myvar = "<script type='text/javascript'>
var myvar= true;
document.write(myvar);
</script>";
//$myvar = "aDuck";
if ($echo) {
echo $myvar;
}
}
function foo($echo) {
if ($echo) {
//this echoes "true", which is the value of js "myvar"
echo "true";
}
}
if (myFunc(true) == foo(true)) {
echo "<br> WOW! it works!";
}
?>
我希望PHP在不刷新页面的情况下测试同一文件中javascript变量的值。我知道有多种方法可以通过多个文件(ajax,json ...)将js vars传递给php,但是我很好奇,想知道 this 是否可以工作。可以,但是我不满意,因为PHP实际上执行了这些功能。
这是输出:
truetrue
WOW! It works!
所测试的实际情况似乎是“此函数回显true
”。
现在问问题:
true
?myFunc
和foo
,而无需myvar
才能被PHP脚本读取?答案 0 :(得分:0)
您应该将“ echo”逻辑放在这样的函数之外。
function myFunc() {
//this js will print display the value of "myvar"
$myvar = "<script type='text/javascript'>
var myvar= true;
document.write(myvar);
</script>";
return $myvar;
}
// Here you use echo or not
if($condition){
echo myFunc();
}
答案 1 :(得分:0)
PHP在服务器上运行,以生成供Web浏览器(“客户端”)运行的网页。客户端获取此输出并对其进行处理。对于网络浏览器,它将显示HTML并执行JavaScript。
在您的代码中,<div dangerouslySetInnerHTML={{__html: this.state.blog_post.body}} />
包含一个以 select job, item, lst_trx_date from (select job, item, lst_trx_date, row_number()
over(partition by stat,job,item order by
lst_trx_date desc) rn
from <table>)t
where rn = 1
开头的字符串,它不包含$myvar
。 PHP无法运行JavaScript代码,这就是浏览器的工作。
此外,当您执行<script
时,将添加到发送到浏览器的输出中。因此,您的代码正在执行的操作是,向浏览器发送一些要运行的JavaScript代码,向浏览器发送true
一词(将其显示在屏幕上,就像是HTML页面一样),然后比较的返回值2个功能。
这2个函数不返回任何内容,或者它们返回echo
,您正在对其进行比较。 true
是正确的,因此您的NULL
也被打印到屏幕上(发送到浏览器以显示为HTML)。
您无法做自己想做的事情。您无法将JavaScript程序的输出与PHP变量进行比较。您将需要考虑另一种解决方案。
答案 2 :(得分:0)
有人在这里提出了一个涉及缓冲区操作的解决方案的不同问题:How do I capture PHP output into a variable?
我只是想说,如果它们是自定义函数,从长远来看,一些小的重构可能会为您提供更好的服务。代替:
function foo() {
echo 'blah';
}
将其更改为此:
function foo() {
echo bar();
}
function bar() {
return 'blah';
}
这样,您对foo()
的现有调用将保持不变,但是,如果您只想要该值,则可以调用bar()
。
具体针对您的问题:
<?php
function myFunc( ...$params ) {
$x = myFunc2( ...$params );
if( $x !== false ) echo $x;
}
function foo( ...$params ) {
$x = foo2( ...$params );
if( $x !== false ) echo $x;
}
function myFunc2($echo) {
//this js will print display the value of "myvar"
$myvar = "<script type='text/javascript'>
var myvar= true;
document.write(myvar);
</script>";
//$myvar = "aDuck";
if ($echo) {
return $myvar;
} else {
return false;
}
}
function foo2($echo) {
if ($echo) {
//this echoes "true", which is the value of js "myvar"
return "true";
} else {
return false;
}
}
if (myFunc2(true) == foo2(true)) {
echo "<br> WOW! it works!";
}
?>
但是...如果将True传递给专门用于指定是否要回显但又不想回显的参数,则表明代码中存在一个更为总体的结构性问题。
>