从 PHP 访问 JavaScript 变量

IT技术 php javascript variables
2021-02-02 14:45:11

我需要使用PHP访问JavaScript变量这是我目前正在尝试的代码的精简版本,它不起作用:

<script type="text/javascript" charset="utf-8">
    var test = "tester";
</script>

<?php
    echo $_GET['test'];
?>

我对 JavaScript 和 PHP 都是一个全新的人,所以我真的很感激任何建议。

更新:好的,我想我简化了太多。我想要做的是创建一个表单,在提交时更新 Twitter 状态。我的表单工作正常,但我还想添加地理定位数据。由于我使用 Javascript(特别是 Google Geolocation API)来获取位置,我在提交表单时如何使用 PHP 访问该信息?

6个回答

简短的回答是你不能

我不知道任何 PHP 语法,但我可以告诉你的是,PHP 在服务器上执行,而 JavaScript 在客户端(在浏览器上)执行。

您正在执行 $_GET,用于检索表单值

内置的 $_GET 函数用于以 method="get" 的形式收集值。

换句话说,如果您的页面上有:

<form method="get" action="blah.php">
    <input name="test"></input>
</form>

您的 $_GET 调用将检索该输入字段中的值。

那么如何从 JavaScript 中检索一个值呢?

好吧,您可以将 javascript 值粘贴在隐藏的表单字段中...

<script type="text/javascript" charset="utf-8">
    var test = "tester";
    // find the 'test' input element and set its value to the above variable
    document.getElementByID("test").value = test;
</script>

... elsewhere on your page ...

<form method="get" action="blah.php">
    <input id="test" name="test" visibility="hidden"></input>
    <input type="submit" value="Click me!"></input>
</form>

然后,当用户单击您的提交按钮时,他/她将向 blah.php 发出“GET”请求,并发送“test”中的值。

@Chris Armstrong jquery 是一个不错的选择,绝对我认为使用常规按钮而不是表单提交按钮会更好,使用 jquery 将函数绑定到按钮的“单击”事件,然后捕获地理位置然后使用javascript提交表单。
2021-03-14 14:45:11
不可见的表单字段似乎工作正常,地理定位数据只有两个坐标,所以大小应该不是问题,但是我正在考虑使用 ajax(特别是 jquery)提交表单,所以你认为我最好等到用户点击提交后再寻找他们的位置?
2021-03-21 14:45:11
@Chris Armstrong 当然,这是一个很好的解决方案。但是,我不知道有多少数据,我相信GET 请求的数据限制约为 2kb(未研究,只是假设)。您可能需要考虑使用 POST 而不是 GET 来发送表单数据。此外,这样数据就不会出现在浏览器的 URL 字段中。需要考虑的其他事项 - 您可以在页面加载时设置地理位置数据,但是如果用户在单击“提交”时位于不同的位置怎么办?在这种情况下,您可能需要使用 javascript 提交表单:bit.ly/qOEhx
2021-03-23 14:45:11
谢谢,我已经更新了我的问题以澄清我想要实现的目标。您认为上述解决方案(不可见表单域)仍然是最佳解决方案吗?
2021-03-27 14:45:11
您还可以使用 XHR 加载您的页面并将 get 变量放入您自己。这将删除提交的表单...基本上,您将加载 url "asdf.php?test="+test.value
2021-04-04 14:45:11

由于 JavaScript 是一种客户端语言而 PHP 是一种服务器端语言,您需要将变量物理推送到 PHP 脚本,方法是在 PHP 脚本的页面加载中包含变量 (script.php?var=test ),这实际上与 JavaScript 无关,或者每次更改变量时通过 AJAX/AHAH 调用将变量传递给 PHP。

如果你确实想走第二条路,你会看到 XMLHttpRequest,或者我的偏好,jQuerys Ajax 调用:http ://docs.jquery.com/Ajax

_GET 访问查询字符串变量,test 不是查询字符串变量(PHP 不以任何方式处理 JS)。你需要重新思考。您可以创建一个 php 变量 $test,然后执行以下操作:

<?php
$test = "tester";
?>
<script type="text/javascript" charset="utf-8">
    var test = "<?php echo $test?>";
</script>

<?php
    echo $test;
?>

当然,我不知道你为什么想要这个,所以我不确定最好的解决方案。

编辑:正如其他人所指出的,如果 JavaScript 变量确实是在客户端上生成的,则您将需要 AJAX 或表单将其发送到服务器。

您可以使用 method="GET" 提交 HTML 表单。
2021-03-17 14:45:11
如何使它成为查询字符串变量?还是我需要使用不同的 php 方法?
2021-03-18 14:45:11

如果向用户显示数据,请执行重定向:

<script language="JavaScript">
    var tester = "foobar";
    document.location="http://www.host.org/myphp.php?test=" + tester;
</script>

或 iframe:

<script language="JavaScript">
    var tester = "foobar";
    document.write("<iframe src=\"http://www.host.org/myphp.php?test=" + tester + "\"></iframe>");
</script>

如果您不需要用户输出,请创建一个宽度=0 和高度=0 的 iframe。

尝试将其添加到您的 js 函数中:

    var outputvar = document.getElementById("your_div_id_inside_html_form");
    outputvar.innerHTML='<input id=id_to_send_to_php value='+your_js_var+'>';

稍后在 html 中:

    <div id="id_you_choosed_for_outputvar"></div>

此 div 将包含要通过表单传递到另一个 js 函数或 php 的 js var,请记住将其放置在您的 html 表单中!。这个解决方案对我来说很好。

在您的特定地理位置情况下,您可以尝试将以下内容添加到函数 showPosition(position):

    var outputlon = document.getElementById("lon1");
    outputlon.innerHTML = '<input id=lon value='+lon+'>';
    var outputlat = document.getElementById("lat1");
    outputlat.innerHTML = '<input id=lat value='+lat+'>';  

稍后将这些 div 添加到您的 html 表单中:

<div id=lat1></div>
<div id=lon1></div>

在这些 div 中,您将获得纬度和经度作为 php 表单的输入值,您最好使用 css 隐藏它们(如果使用,只显示地图上的标记),以避免用户在提交之前更改它们,并设置您的数据库接受长度为 10,7 的浮点值。

希望这会有所帮助。