duanliang4009
2014-01-23 06:37
浏览 54
已采纳

如何使用Javascript中的参数值生成Symfony 2 twig URL?

I want to append query string parameters from javascript (jquery) to symfony 2 url. I want to pass the value of selected radio button to ajax request e.g.in plain php I would have done like

$(document).ready(function() {
    $('.id_radio').click(function() {                      
        $.ajax({
            'url': 'example.php?id='+($this).val(),
            'success': function(r) {
                $('#div1').html(r);
            }
        });
    });

How to generate such URL in symfony2 twig ? We generate URL in symfony 2 twig like

{{ path('example_path', {'id': id}) }} where id is twig variable.

I tried using FOSJsRoutingBundle but don't know if it is for same problem and not sure how to use it ?

I tried below but it is not working.

$('.id_radio').click(function() {
    alert(Routing.generate('example_path', {
        'id': $(this).val()
        }));
    $.ajax({
        'url': Routing.generate('example_path', {
            'id': $(this).val()
            }),
        'success': function(r) {
            $('#div1').html(r);
        }
    });
});

Solution mentioned below by koskoz worked, I did not pass options={"expose"=true} but after adding it worked.

But there is one more problem. It works only until we do not refresh page. If we refresh page, it does not work. To make it work, I have to delete symfony cache files.

It does not work in other browser if we have already opened it in one browser.

图片转代码服务由CSDN问答提供 功能建议

我想将查询字符串参数从javascript(jquery)附加到symfony 2 url。 我希望将所选单选按钮的值传递给ajax请求,例如,简单的php我会做的就像

  $(document).ready(function(){
  $('。id_radio')。click(function(){
 $ .ajax({
'url':'example.php?id ='+($ this).val(),
'success'  :function(r){
 $('#div1')。html(r); 
} 
}); 
}); 
   
 
 

如何在symfony2 twig中生成这样的URL?我们在symfony 2 twig中生成URL,如

{{path('example_path',{'id':id})}} 其中id是twig变量。

我尝试使用FOSJsRoutingBundle,但不知道是否出现同样的问题并且不确定如何使用它?

我在下面试过但它没有用。

  $('。id_radio')。click(function(){
 alert(Routing.generate(  'example_path',{
'id':$(this).val()
})); 
 $ .ajax({
'url':Routing.generate('example_path',{
'  id':$(this).val()
  },
'成功':function(r){
 $('#div1')。html(r); 
} 
}); 
}); 
   
 
 

koskoz下面提到的解决方案工作,我没有传递options = {“expose”= true}但是在添加它之后工作了。

但还有一个问题。 它只在我们不刷新页面之前有效。 如果我们刷新页面,它不起作用。 为了使它工作,我必须删除symfony缓存文件。

如果我们已经在一个浏览器中打开它,它在其他浏览器中不起作用。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • dream890110 2014-01-23 08:11
    已采纳

    Instead of

    /**
     * @Route("/example/{name}", name="example_path", options={"expose"=true})
     * @Template
     */
    public function exampleAction($name)
    {
    
    }
    

    and using FOSJsRoutingBundle

    $('.id_radio').click(function() {
        alert(Routing.generate('example_path', {'id': $(this).val()}));
        $.ajax({
            'url': Routing.generate('example_path', {'id': $(this).val()}),
            'success': function(r) {
                $('#div1').html(r);
            }
        });
    });
    

    Below worked better for me,

         /**
         * @Route("/example", name="example_path", options={"expose"=true})
         * @Method({"GET"})
         * @Template 
         */
        public function exampleAction()
        {
    
    
        }
    
    $('.id_radio').click(function() {
        $.ajax({
            'url': '{{ path('example_path') }}',
            'data': 'name='+$(this).val(),
            'type': 'GET',
            'success': function(r) {
                $('#div1').html(r);
            }
        });
    });
    
    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题