从ajax post请求访问symfony2控制器

时间:2014-03-05 11:13:07

标签: jquery ajax symfony

我正在开发一个Symfony应用程序,在一个twig模板中我放置了一个图像,当单击该图像时,我想发出一个ajax请求从控制器中检索一些数据。

我的问题是我在尝试访问控制器中的url时遇到404错误。

这是脚本代码:

$('.info').click(function ()
{
   var optionSelected = $('#pickupCenter').val(); 

   $.ajax({
      url: "{{ path('_ajaxUpdateInfo') }}",
      type: "POST",
      data: { "optionSelected" : optionSelected },
      success: function(data) { 
         alert (data);
      },

      error: function(XMLHttpRequest, textStatus, errorThrown)
      {
        alert('Error: ' +  errorThrown);
      }
   });
});

这是routing.yml中的路由

_ajaxUpdateInfo:
pattern:  /update/data/from/ajax/call
defaults: { _controller: RedessAlquilerCochesBundle:Default:updateData }

这是控制器:

public function updateDataAction()
{
    // Retrieve data
}

正如我所说,我得到一个路径未找到错误,所以我想我得到的网址和路由部分错了,但我不知道是什么问题。

2 个答案:

答案 0 :(得分:1)

您正在尝试在未使用twig编译的文件中使用twig函数。

您可以使用FOSJsRoutingBundle。 或者将{{ path('_ajaxUpdateInfo') }}的值从twig模板传递给你的js脚本。

答案 1 :(得分:0)

使用FOSJsRoutingBundle以javascript代码公开路线。

示例:

$.ajax({
                type: "POST",
                url: Routing.generate('_ajaxUpdateInfo'),
                data: {somedata: somedatavalue},
                dataType: "json",
                success: function(response) {
                    //------------------
                }
            });


/**
 * @Route("/update/data/from/ajax/call", name="_ajaxUpdateInfo", options={"expose"=true})
 */
public function updateData()
{
   //--------------------------
}

我写过注释。您可以在yml中公开路径,如下所示:

# app/config/routing.yml
_ajaxUpdateInfo:
    pattern: /update/data/from/ajax/call
    defaults: { _controller: RedessAlquilerCochesBundle:Default:updateData }
    options:
        expose: true