2014-01-23 30 views
4

我想從javascript(jquery)追加查詢字符串參數到symfony 2 url。 我要選擇的單選按鈕的值傳遞給e.g.in純PHP Ajax請求,我會做這樣如何用Javascript中的參數值生成Symfony 2枝條URL?

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

如何產生Symfony2的樹枝此類網址?我們在symfony 2樹枝中生成URL,如

{{ path('example_path', {'id': id}) }}其中id是樹枝變量。

我試過使用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); 
     } 
    }); 
}); 

解決方案下面提到的koskoz工作,我沒有通過options = {「expose」= true},但添加後它工作。

但還有一個問題。它只在我們不刷新頁面之前有效。如果我們刷新頁面,它不起作用。爲了使它工作,我必須刪除symfony緩存文件。

如果我們已經在一個瀏覽器中打開過,它在其他瀏覽器中不起作用。

+0

我在這裏找到了解答,這要歸功於Airam: http://stackoverflow.com/a/16584335/4008043 –

回答

1

而不是

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

} 

,並使用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); 
     } 
    }); 
}); 

以下工作對我來說更好,

 /** 
    * @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); 
     } 
    }); 
}); 
+0

這是可行的,因爲您直接在您的Twig模板中添加JavaScript,但'path' helper在.js文件中不起作用。您可能會遇到資產緩存問題,因爲我在文檔中使用過FOSJsRoutingBundle很多次,並且遇到了您的問題。 – DevAntoine

3

這正是FOSJsRoutingBundle的目標是:

您配置要在JavaScript中暴露的路線,加載JS,然後簡單地做這樣的事情:

Routing.generate('my_route_to_expose', { id: 10 }); 
+0

還有一個問題。它只在我們不刷新頁面之前有效。如果我們刷新頁面,它不起作用。爲了使它工作,我必須刪除symfony緩存文件。 如果我們已經在一個瀏覽器中打開它,它在其他瀏覽器中不起作用。 – vishal