我想将一个JS变量传递给PHP并在那里使用它

时间:2013-05-18 00:54:19

标签: php javascript ajax

我想从JavaScript传递变量到PHP。我已经读过没有AJAX调用就无法执行此操作,或者将其放在JavaScript中的URL中,然后使用$_GET。问题是我的变量是在初始化时创建的(在窗口加载时),所以如果我尝试$_GET,我会陷入无限循环。

变量为latilongi

这是我的JavaScript(没有AJAX调用,因为它创建了一个无限循环等...):

var map;

 function initialize() {
    var mapOptions = {
      zoom: 12,
      streetViewControl: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map-canvas"),
        mapOptions);


     // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);

  var lati = position.coords.latitude;
  var longi = position.coords.longitude;


       map.setCenter(pos);

    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }

  var length = locationsArray.length, element=null;
  for (var i = 0; i <length; i++)
  {
    element= locationsArray[i];

    var element1 = element.split(";");
    var posi = new google.maps.LatLng(element1[0],element1[1]);
    var marker = new google.maps.Marker({
    position: posi,
    map: map,
    icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&chld='+i+'|e74c3c|333333',
    url: 'index.php?id='+i+'#eventDetails'
   });
    google.maps.event.addListener(marker, 'click', function() {
    window.location.href = this.url;
    });
  }
}
google.maps.event.addDomListener(window, 'load', initialize);  

我想使用变量的PHP:

$url="http://build.uitdatabank.be/api/events/search?key=AEBA59E1-F80E-4EE2-AE7E-CEDD6A589CA9&latlng=".$lati.";".$longi."!10km&format=json";
$events= json_decode(file_get_contents($url));

1 个答案:

答案 0 :(得分:0)

只需在您的<head>元素中添加脚本标记:

<script type="text/javascript">
window.lati = <?=json_encode($_GET["lati"]);?>;
window.longi= <?=json_encode($_GET["longi"]);?>;
</script>

现在您可以在页面

中的Javascript中的任何位置访问它

不要忘记在将值直接打印到输出之前验证这些值(以防止XSS攻击 - 即使json_encode函数可能有助于防止其中某些值 (例如 - 如果您的参数是坐标,就像它似乎一样 - 使用is_numeric函数检查它们是否为数字)

有效性检查的示例:

<?
$lng = null;
$lat = null;
if(isset($_GET["longi"]) && is_numeric($_GET["longi"])){
    $lng = $_GET["longi"];
}
if(isset($_GET["lat"]) && is_numeric($_GET["lat"])){
    $lat = $_GET["lat"];
}
?>

<script type="text/javascript">
window.lati = <?=json_encode($lat);?>;
window.longi= <?=json_encode($lng);?>;
</script>