Hallo Leute Ich bin neu in Symfony 2 und ich habe wenig verwirrend mit dem Senden von Daten mit AJAX zu PHP-Controller in Symfony 2. Ich möchte ein Projekt mit Google Map erstellen, damit ich MapController erstellen:Senden Sie Ajax Daten an Php-Controller in Symfony2
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
class MapController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// replace this example code with whatever you need
return $this->render('map/map.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'contData' => ['lat' => '51.24591334500776', 'lng'=> '22.56967306137085']
]);
}
public function saveAction(Request $request)
{
$data = $request->request->get('params');
return new JsonResponse(['data' => $data], Response::HTTP_OK);
}
}
dann erstellen i-Routing:
app:
resource: '@AppBundle/Controller/'
type: annotation
map:
path: /map
defaults: { _controller: AppBundle:Map:index }
requirements:
page: '\d+'
map_save:
path: /map/save
defaults: { _controller: AppBundle:Map:save }
methods: [POST]
so, wenn ich Weg gehen zu:
i Anzeige meiner Vorlage map.html.twig
dort habe ich JavaScript-Funktion, wo ich versuchte, Ajax-Daten zu einem gewissen Controller zu senden:
marker.addListener("click", function() {
//!
var http = new XMLHttpRequest();
var url = "map/save";
var params = marker.position.lat();
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.onreadystatechange = function() {//Call a function when the state changes.
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
Aber ich habe NULL in dieser Antwort: {"data": null}
ich weiß, aber dieser Funktionsname ist nur für den Test jetzt. Also, wenn ich in meinem MapController eine Methode saveCoordinatesAction erstelle, wie soll dann meine var url in Javascript aussehen? Ich habe versucht, "map/saveCoordinatesAction", "Karte/saveCoordinates", "" app_dev.php/map/saveCoordinatesAction "und andere Kombinationen, aber diese Anfrage noch nicht erreicht, nicht zu meinem PHP-Funktion in diesem Controller kommen – johnyT
mam POST http : //localhost/googlemap/web/app_dev.php/saveCoordinatesAction 404 (Nicht gefunden), es ist jetzt ein symphony kilka godzin für das Projekt, und es ist in der Nähe von mnie jescze trochę mylą, wcześniej używałem np Yii2 framework, gdzie w Wenn Ihre Basis-URL "http: // localhost/googlemap/web/app_dev.php /" lautet, dann sollten Sie alle verwenden. Wenn Ihre Basis-URL "http: // localhost/googlemap/web/app_dev.php /" lautet, wird es einfacher für andere Personen, sich unserer Diskussion anzunähern – johnyT
dies (einschließlich 'http: //' Protokollpräfix) in der URL, die dein Javascript aufruft, zB 'http: // localhost/googlemap/web/app_dev.php/saveCoordinates' (' app_dev.php' ist optional, mach es einfach nicht belassen Sie es dort auf Ihrem Produktionsserver), aber Sie müssen eine Route für diese Adresse in 'routing.yml' definieren, genauso wie Sie es für die' map' URL getan haben. – Najki