Ajax url для действия не работает + Symfony2

Я хочу сделать ajax-вызов с автозаполнением jquery следующим образом:

$("#register_player_team").autocomplete({ source: function( request, response ) { $.ajax({ url: "{{path('volley_scout_getteams_data')}}", dataType: "jsonp", success: function( data ) { console.log(data); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr.status); console.log(thrownError); } }); } }); 

В моем routing.yml я определил следующий маршрут:

 volley_scout_getteams_data: pattern: /team/getteams defaults: { _controller: VolleyScoutBundle:Team:getteams } 

И в моем TeamController у меня есть действие с именем getteamsAction ():

 public function getteamsAction() { $entityManager = $this->getDoctrine()->getManager(); // Get teams from database $teams = $entityManager->getRepository('VolleyScoutBundle:Teams')->findAll(); foreach($teams as $team){ var_dump($team); } die(); } 

(Дамп и die () предназначены только для тестирования, я хочу проверить, может ли он найти ссылку). Но когда я хочу сделать вызов ajax, я всегда получаю следующую ошибку:

 http://localhost:8080/volleyscout/web/app_dev.php/user/%7B%7Bpath('volley_s…)%7D%7D?callback=jQuery110207641139030456543_1389372448462&_=1389372448463 404 (Not Found) 

По какой-то причине он не может найти действие … Кто-нибудь знает, что я делаю неправильно? И когда я пробую ссылку вроде этого: web/app_dev.php/team/getteams я получаю свалку команд ..

UPDATE: мои ссылки javascript определены в виде базы (twig) следующим образом:

 {% block javascripts %} {% javascripts '@VolleyScoutBundle/Resources/public/js/jquery-1.10.2.min.js' '@VolleyScoutBundle/Resources/public/js/*' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %} 

И вызов ajax находится на моей странице. Js:

 (function () { $("#register_userType").change(function(){ var value = $(this).find("option:selected").val(); if(value == 'P' || value == 'T'){ $('.teams').show(); } else{ $('.teams').hide(); } }); $("#register_player_team").autocomplete({ source: function( request, response ) { $.ajax({ url: "{{path('volley_scout_getteams_data')}}", dataType: "jsonp", success: function( data ) { console.log(data); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr.status); console.log(thrownError); } }); } }); })(); 

ОБНОВЛЕНИЕ 2: Я сделал следующее:

  • Установлен комплект
  • Добавлен пакет для моего AppKernel
  • Зарегистрировано определение маршрутизации в app / config / routing.yml
  • Опубликованные активы (php app / console assets: install –symlink web)

Добавлено 2 строки javascript для моего base.html.twig следующим образом:

 {% block javascripts %} {% javascripts '@VolleyScoutBundle/Resources/public/js/jquery-1.10.2.min.js' '@FOSJsRoutingBundle/Resources/public/js/router.js' '@VolleyScoutBundle/Resources/public/js/bootstrap.min.js' '@VolleyScoutBundle/Resources/public/js/jquery-ui-1.10.3.custom.min.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} <script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script> <script src="{{ asset('bundles/volleyscout/js/security.js') }}"></script> {% endblock %} 

Но теперь я получаю следующие ошибки:

 GET http://localhost:8080/volleyscout/web/app_dev.php/js/routing?callback=fos.Router.setData 500 (Internal Server Error) register:117 Uncaught Error: The route "volley_scout_getteams_data" does not exist. 

Это очень странно. Когда я очищаю свой кеш, первый раз он работает отлично. И когда я обновляю, он показывает ошибки …

Следующая строка в вашем javascript-коде

 url: "{{path('volley_scout_getteams_data')}}", 

не будет работать …

Лучший способ – использовать FOSJsRoutingBundle

1 Установите FOSJsRoutingBundle, чтобы выставить свою маршрутизацию в своем JavaScript-коде. (очень прямолинейно)

2 Включение маршрута

 volley_scout_getteams_data: pattern: /team/getteams defaults: { _controller: VolleyScoutBundle:Team:getteams } options: expose: true 

3 Адаптируйте свой js

 var getTeamsUrl = Routing.generate('volley_scout_getteams_data'); $("#register_player_team").autocomplete({ source: function( request, response ) { $.ajax({ url: getTeamsUrl, //... }); } }); 

Перешел через этот вопрос / ответ и почти начал устанавливать упомянутый FOSJsRoutingBundle, упомянутый @Mick в ответе. Поскольку у меня была такая же проблема в моем Ajax-запросе, я не смог получить URL-адрес. Но теперь я не вижу необходимости получать FOSJsRoutingBundle ..

Что такое поле ввода без <form> ? Или еще лучше: почему мое поле <input> не находится в <form> ? Абсолютно допустимый HTML имеет поля <input> вне тега формы, но на самом деле это бессмысленно.

Во всяком случае, имеет смысл иметь <form> arround <input> так что если javascript не должен работать, почему бы и так, он отправил бы запрос в нужное место и загрузил страницу. Итак, теперь, если у вас есть форма arround, вход просто захватывает URL-адрес оттуда …

Это сработало для меня:

Добавьте <form>

 {{ form_start(form, {'action': path('volley_scout_getteams_data')}) }} 

получить URL / путь с помощью javascript

 $.ajax({ url: $(this).closest('form').attr('action'), 

удалите {{}} из вашего URL-адреса ajax.