通过Ajax Symfony3&amp ;;发送带路径的值枝条

时间:2017-05-30 18:51:08

标签: php ajax symfony twig

我正在尝试将值发送到SymfonyControllervíaAjax的路径中。我确信我发送错了,但我找不到错误

让我分享一下代码:

视图

我写过

<script type="text/javascript">  
$("#my-select").change(function(event){
 var id=$("#my-select").val();  
 var path = "path('go_to_route/" + id+ "')";      
 var route="{{ "+path+" }}";
 alert(path); 
 $.ajax({
  url : route,
  data : {},
  type : 'POST',
  dataType : '',
  success : function(data) {
  alert(data);
  },                
  error : function(xhr, status) {
  alert('Error');
  },
  complete : function(xhr, status) {
  //alert('Finally');
  }
  });
}); 
</script>

路由

routing.yml

go_to_route:
path:     /my-route/{id}
defaults: { _controller: myBundle:MyController:myFunction }

此操作位于 MyBundle / MyController

控制器

public function myFunctionAction($id){
return new Response($id);
}

Ajax始终返回“错误”消息。我认为发送值时发生了错误。我试过了,但它不起作用。 我究竟做错了什么? 这是我与Symfony的第一周。我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

而不是

var path = "path('go_to_route/" + id+ "')";      
var route="{{ "+path+" }}";

使用:

var path = "{{ path('go_to_route', {'id': '__ID__'}) }}";       // Result: var path = "my_route/__ID__";
path = path.replace("__ID__", id);                              // Result: path equals "my_route/17" for example

答案 1 :(得分:1)

var path = "path('go_to_route/" + id+ "')";      

只是一个字符串。 Twig不解析该表达式,因为它不在{{

你可以做到

var path ='{{ path("go_to_route", {'id': 'xxx'}) }}'; // /my-route/xxx
path = path.replace("xxx", id); // replace xxx with your id

你需要替换值,因为twig不知道我们的js变量id

并且不需要var route="{{ "+path+" }}";

一起:

<script type="text/javascript">  
$("#my-select").change(function(event){
 var id=$("#my-select").val();  
 var path ='{{ path("go_to_route", {'id': 'xxx'}) }}';
 path = path.replace("xxx", id);
 $.ajax({
  url : path,
  data : {},
  type : 'POST',
  dataType : '',
  success : function(data) {
  alert(data);
  },                
  error : function(xhr, status) {
  alert('Error');
  },
  complete : function(xhr, status) {
  //alert('Finally');
  }
  });
}); 
</script>

<强>替代

更清洁的方法是使用https://github.com/FriendsOfSymfony/FOSJsRoutingBundle