Symfony:通过GET将变量发送到Ajax的处理程序

时间:2016-03-10 10:54:08

标签: javascript php jquery ajax symfony

我想在我的Symfony3.0.3项目中使用AJAX。 沟通工作,但我无法从JS变为处理程序。在JS的方向处理程序中,它工作正常。

我试图通过 " $ request-> query-> get(' id'))&#来获取请求中的变量34; 但我只得到" null"。

另一方面,我尝试使用网址中的变量,但我收到此错误:

  

"在呈现模板期间抛出异常("缺少某些必需参数(" id")以生成路由的URL " admin_ajax"。")在CommonBundle中:默认:index.html.twig在第421行。"

我不介意使用解决方案或其他解决方案(我会根据您的建议使用最好的解决方案),但我仍然希望解决这两个错误。

JS

function selectClient(idClient)//idClient = 1
{
    alert(idClient);
    $.post('{{path('admin_ajax')}}',{idClient: id}, 
            function(response)
            {
                if(response.code == 100 && response.success)
                {
                    alert(response.id);//Show null if using $request->query->get('id')) in handler but should be 1
                }}, "json");    
}

路由:

admin_ajax:
    defaults: { _controller: CommonBundle:Default:getClient }
    path:     /ajax/{id}

处理程序:

public function getClientAction($id)
{
    $request = $this->container->get('request_stack')->getCurrentRequest();
    $isAjax = $request->isXMLHttpRequest();
    if ($isAjax)
    {
        $response = array("code" => 100, "success" => true, "id" => $request->query->get('id'));
        return new Response(json_encode($response));
    }
    $response = array("code" => 0, "success" => false);
    return new Response(json_encode($response));
}

编辑: 感谢Rim,Rvanlaak回答,我使用了FOSJsRoutingBundle

JS

function selectClient(idClient)
{
    $.get(Routing.generate('ajax_getclient', { id:idClient }), 
            function(response)
            {
                if(response.code == 100 && response.success)
                {
                    alert(response.id);
                }
                else
            }, "json");
}

路由:

ajax_getclient:
    defaults: { _controller: CommonBundle:Default:getClient }
    path:     /ajax/{id}
    options:
        expose: true
  

注意选项" expose:true"是必要的。

1 个答案:

答案 0 :(得分:1)

这是因为twig在javascript之前执行所以他没有重新调整客户端id param

我有同样的问题并使用FOSJSRoutingBundle解决它,请看这篇文章:

Ajax url parametetr using Twig path