嗨,大家好我是symfony 2中的新手,我很少混淆用ajax将数据发送到symfony 2中的php控制器。我想用谷歌地图创建项目,所以我创建了MapController:
<?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);
}
}
然后我创建路由:
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]
所以当我去路线时:
我显示我的模板map.html.twig
我有javascipt函数,我试图将ajax数据发送到某个控制器:
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);
但是我在这个回复中有NULL: { “数据”:空}
答案 0 :(得分:1)
你需要问问自己,你想用JS发送的这些数据做什么。如果它与地图功能相关,那么在MapController中创建一个新方法似乎很好。如果它与地图无关,那么创建一个新的控制器可能是一个很好的方法。
方法和控制器的命名应该与您正在做的事情相关。您的saveData
示例并不那么明显。如果您要保存坐标,则可以将此方法命名为saveCoordinatesAction
,并定义仅支持POST请求的专用路由。
至于将URL传递给JS,请查看FOSJsRoutingBundle - 它允许您直接从JavaScript生成特定路由。