从PHP访问JavaScript变量

我需要使用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访问这些信息?

简短的答案是你不能

我不知道任何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> 

然后,当用户点击你的提交按钮时,他/她将发出一个“GET”请求到blah.php,沿着'test'的值发送。

由于JavaScript是客户端语言,PHP是服务器端语言,因此您需要将变量物理地推送到PHP脚本,方法是在PHP脚本的页面加载中包含变量(script.php?var = test ),这与JavaScript没有任何关系,或者每次变量发生变化时通过AJAX / AHAH调用将变量传递给PHP。

如果您确实想要走第二条路,那么您将会看到XMLHttpRequest,或者我的首选项,jQuerys Ajax调用: http ://docs.jquery.com/Ajax

_GET访问查询字符串变量,测试不是查询字符串变量(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或窗体发送到服务器。

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

 <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> 

如果您不需要用户输出,请创建width = 0和height = 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 var通过一个表单传递给另一个js函数或php,记得把它放在你的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的float值。

希望这会有所帮助。

那么GET的问题是,如果用户有一些知识,用户可以自己改变这个值。 我写了这个,以便PHP能够从JavaScript中检索时区:

// – index.php

 <?php if (!isset($_COOKIE['timezone'])) { ?> <html> <script language="javascript"> var d = new Date(); var timezoneOffset = d.getTimezoneOffset() / 60; // the cookie expired in 3 hours d.setTime(d.getTime()+(3*60*60*1000)); var expires = "; expires="+d.toGMTString(); document.cookie = "timezone=" + timezoneOffset + expires + "; path=/"; document.location.href="index.php" </script> </html> <?php } else { ?> <html> <head> <body> <?php if(isset($_COOKIE['timezone'])){ dump_var($_COOKIE['timezone']); } } ?> 

JS ist基于浏览器,PHP是基于服务器的。 你必须生成一些基于浏览器的请求/信号,从JS获取数据到PHP中。 看看Ajax 。