按钮点击

时间:2017-01-07 08:06:27

标签: javascript php jquery google-maps symfony

我有谷歌地图和一个突出显示地图顶部某个区域的矩形。该矩形的东北和西南纬度存储为javascript变量(ne,sw)。我想在按钮点击时将这些参数发送到php控制器,如下所示:

查看

我该怎么做?我不知道AJAX和JQuery。

{% extends 'base.html.twig' %}

{% block body %}

var ne;
var sw;

<a href="/highlighted/{{something}}" class="btn btn-success">View</a>
<div id="map" style="width:100%;height:500px"></div>


<script language="javascript" type="text/javascript">
function myMap() {
map = new google.maps.Map(document.getElementById('map'), {          center: {lat: 6.911918, lng: 79.892780},
    zoom: 9
  });

  var bounds = {
    north: 7.011918,
    south: 6.811918,
    east:  79.992780,
    west:  79.792780
  };

  // Define the rectangle and set its editable property to true.
  rectangle = new google.maps.Rectangle({
    bounds: bounds,
    editable: true,
    draggable: true
  });

  rectangle.setMap(map);
  // Add an event listener on the rectangle.
  rectangle.addListener('bounds_changed', showNewRect);

  // Define an info window on the map.
  infoWindow = new google.maps.InfoWindow();
}

// Show the new coordinates for the rectangle in an info window.

/** @this {google.maps.Rectangle} */
function showNewRect(event) {
  var ne = rectangle.getBounds().getNorthEast();
  var sw = rectangle.getBounds().getSouthWest();

  map.northLatitude=2.33;

  var contentString = '<b>Rectangle moved.</b><br>' +
      'New north-east corner: ' + ne.lat() + ', ' + ne.lng() + '<br>' +
      'New south-west corner: ' + sw.lat() + ', ' + sw.lng();

  // Set the info window's content and position.
  infoWindow.setContent(contentString);
  infoWindow.setPosition(ne);

  infoWindow.open(map);

    //window.location.href = "Controller/SatelliteImages_Controller.php?w1=" + ne + "&w2=" + sw;
    return (ne+sw);
}

</script>

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyALi1Ro_johRtFp2JrLa9zGMLTwBMxBrHQ&callback=myMap"></script>

{% endblock %}

请原谅我糟糕的语法。我是PHP和Symfony的新手。

1 个答案:

答案 0 :(得分:2)

假设您的代码正常运行,您可以使用jquery轻松完成此任务:

<script language="javascript" type="text/javascript">
  $( document ).ready(function() {
    // Your script code here

    function showNewRect(event) {
      // Your code function here

      var neSw = {"data": {"ne": ne, "sw": sw}};
      $.ajax({
         url: 'Controller/SatelliteImages_Controller.php',
         type: "post",
         data: neSw
      })
      .done(function(responseData, status){
        console.log(responseData);
      })
      .fail(function(object, status){
        console.log("Error in Ajax response");
      });
    }  
  });          
</script>

因此,您通过POST将您的变量ne sw发送给您的控制器。在您的控制器中,您可以通过请求对象获取它:$request->get('data');

如果您愿意,可以使用Symfony\Component\HttpFoundation\JsonResponse;

将回复数据发回给AJAX函数以通知一切正常

在Symfony控制器中:

use Symfony\Component\HttpFoundation\JsonResponse;

class YourController extends Controller
{
    public function yourAction() {
        $data = $this->getRequest()->get('data');
        var_dump($data); // Here you can see your vars sent by AJAX
        $dataResponse = array("error" => false); //Here data you can send back
        return new JsonResponse($dataResponse);
    }
}

如果这样做,你必须配置你的jquery AJAX函数来接收json数据:

    $.ajax({
       url: 'Controller/SatelliteImages_Controller.php',
       type: "post",
       data: neSw,
       dataType: 'json'
    })