我想在我的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"是必要的。
答案 0 :(得分:1)
这是因为twig在javascript之前执行所以他没有重新调整客户端id param
我有同样的问题并使用FOSJSRoutingBundle解决它,请看这篇文章: