I have Google maps and a rectangle highlighting some area on top of the map. NorthEast and Southwest latitudes of that rectangle are stored as javascript variables(ne,sw).I want to send those parameters to a php controller on button click, like this:
View
How can I do that? I d'ont have knowledge of AJAX nor 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 %}
Please excuse my bad syntax. I'm new to PHP and Symfony.
Assuming that your code is working you can do this easily with 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>
So you send your vars ne
sw
by POST to your controller. In your controller you can get it by your request object: $request->get('data');
If you want you can send back a response data to the AJAX function to inform all was ok, using Symfony\\Component\\HttpFoundation\\JsonResponse;
In your Symfony controller:
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);
}
}
If you do this you must to configure your jquery AJAX function to receive json data:
$.ajax({
url: 'Controller/SatelliteImages_Controller.php',
type: "post",
data: neSw,
dataType: 'json'
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.