PHP访问Javascript变量


PHP Access Javascript Variable

我有一个HTML页面,我有:

<script>
x = "Success";
</script>

如果我进入Chrome DevTools并运行console.log(window.x),它将返回"Success"。

当我添加以下代码时:

<?php
echo "<script>console.log(window.x)</script>";
?>

我在控制台得到undefined

是否有办法从PHP访问window.x变量?

它的输出是undefined,因为变量x没有在PHP代码中设置。这只是简单的HTML打印它不会将JS变量转换为PHP

尝试:

echo "<script>x='success';console.log(window.x)</script>";

所有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);

$eleDetails在其他属性中包含您想要的PHP数组值。