PHP访问Javascript变量

时间:2016-11-02 04:17:32

标签: javascript php

我有一个HTML页面,我有:

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

如果我进入Chrome DevTools并运行console.log(window.x),它将返回“成功”。

当我添加以下代码时:

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

我在控制台中获得了undefined

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

2 个答案:

答案 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);
除了其他属性外, $ eleDetails还有一个漂亮的PHP数组中你想要的值。