将ajax数据发送到symfony2中的php控制器

时间:2017-04-07 10:19:37

标签: javascript php ajax symfony

嗨,大家好我是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] 

所以当我去路线时:

  

http://localhost/googlemap/web/app_dev.php/map

我显示我的模板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: { “数据”:空}

1 个答案:

答案 0 :(得分:1)

你需要问问自己,你想用JS发送的这些数据做什么。如果它与地图功能相关,那么在MapController中创建一个新方法似乎很好。如果它与地图无关,那么创建一个新的控制器可能是一个很好的方法。

方法和控制器的命名应该与您正在做的事情相关。您的saveData示例并不那么明显。如果您要保存坐标,则可以将此方法命名为saveCoordinatesAction,并定义仅支持POST请求的专用路由。

至于将URL传递给JS,请查看FOSJsRoutingBundle - 它允许您直接从JavaScript生成特定路由。