Symfony routing ajax get method

2019-08-03 15:04发布

问题:

I pass by ajax GET parameters, my url looks like:

example.com/autocamplete?term=string

I add route for that:

autocomplete:
    path:     /autocomplete?term={term}
    defaults: { _controller: CatalogWebBundle:Default:autocomplete }

But it something wrong with my route, because I get error:

GET http://127.0.0.1:8000/autocomplete?term=sdfsd 500 (Internal Server Error)

How to rewrite my route to ajax get patameters ?

JS is:

<script type="text/javascript">
    $(function() {

        //autocomplete
        $("#search").autocomplete({
            source: "\/autocomplete",
            minLength: 1
        });

    });
</script>

回答1:

Install FOSJsRoutingBundle, create a correct route as it is incorrect in your question.

So, you should do something like this:

add bundle JS (may be in base template for global usage):

<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>

configure routing (without QS):

autocomplete:
    path:     /autocomplete
    defaults:
        _controller: CatalogWebBundle:Default:autocomple
    options:
        expose: true

configure your JS:

<script type="text/javascript">
    $(function() {

        //autocomplete
        $("#search").autocomplete({
            source: Routing.generate('autocomplete', { 'term': value });,
            minLength: 1
        });

    });
</script>


回答2:

besides the above version (using FOS JS Routing), if you are "rendering" the JS function files without any need for "dynamic generation or routes" you can use a more simple approach

{{ path('routeName', {'slug': slug}) }}

Note: in your case - building a search - it won't work