我有一个HTML页面,我有:
<script>
x = "Success";
</script>
如果我进入Chrome DevTools并运行console.log(window.x)
,它将返回“成功”。
当我添加以下代码时:
<?php
echo "<script>console.log(window.x)</script>";
?>
我在控制台中获得了undefined
。
有没有办法从PHP访问window.x
变量?
答案 0 :(得分:1)
其输出为undefined
,因为您的 PHP 代码中未设置变量x
。这只是简单的 HTML 打印其未转换 JS 变量为 PHP 。
试用:
echo "<script>x='success';console.log(window.x)</script>";
<强> See OUTPUT here. 强>
答案 1 :(得分:0)
所有PHP都在服务器端执行,因此当您回显出类似的脚本时,您只是使用PHP构建HTML。换句话说,PHP无法解释JavaScript,只能使用浏览器。
我假设您在页面顶部有PHP echo语句,并在其下面定义了“x”的脚本块,如下所示:
<?php
echo "<script>console.log(window.x)</script>";
?>
<script>
x = "Success";
</script>
所以从本质上讲,这就是你得到的:
<script>
console.log(window.x);
x = "Success";
</script>
显然,在您将其发送到控制台时,“x”未定义。但是,如果您将PHP代码移到“x =”Success“;”行下方,那么您的控制台将显示您的期望。
然而,这些都没有解决您真正的问题:如何将JavaScript变量的值传递给PHP?
有三种方法可以实现这一点,AJAX,表单提交或使用无头浏览器。
记住PHP是服务器端,JavaScript是客户端。这意味着您必须将JavaScript发送到客户端浏览器,让浏览器执行您的JavaScript逻辑并使用POST / GET将变量发送回服务器以供PHP使用。
这是一个简单的HTML表单,它将“x”的值发送到服务器:
<form method="POST" action="">
<input type="hidden" id="xValue" name="valueOfX" value="">
<input type="submit" value="Send to Server">
</form>
<script>
var x = "Success";
document.getElementById('xValue').value = x;
</script>
当服务器从表单收到POST时,您会看到“x”的值为:
$_POST["valueOfX"] = "someValue"
您可以避免使用AJAX单击提交按钮。关键的教训是PHP是服务器端,JavaScript是客户端。
这最后一部分很可能超出了你想要做的范围,但它可能会帮助你在其他地方。无头的PHP浏览器
这是一个允许PHP访问浏览器的项目:https://github.com/merlinthemagic/MTS。
此项目在运行PHP的服务器上设置真正的浏览器进程。然后你可以要求它打开网页并获得你需要的元素(在示例中元素有id = xValue):
$myUrl = "http://www.example.com/myPage.php";
$windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);
$selector = "[id=xValue]";
$eleDetails = $windowObj->getElement($selector);
除了其他属性外,