yashodha_h
yashodha_h

Reputation: 1004

Ajax calls in symfony framework

I wanna make ajax calls in symfony2. I already done with ajax with flat php and i have no idea how to set up in this symfony framework.

    <html>
    <head>
    <script>
    function showBook(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else { 
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
                }
            };
            xmlhttp.open("GET","getuser.php?q="+str,true);
            xmlhttp.send();
        }
    }
    function showAuthor(str){
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else { 
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
                }
            };
            xmlhttp.open("GET","getAuthor.php?q="+str,true);
            xmlhttp.send();
        }
    }
    </script>
    </head>
    <body>

    <form action=""> 
    Book name: <input type="text" id="txt1" onkeyup="showBook(this.value)">
    <br><br>
    Author name:<input type="text" id="txt1" onkeyup="showAuthor(this.value)">
    </form>
    <br>
    <div id="txtHint"><b>book info will be listed here...</b></div>

    </body>
    </html>

Where should i pass this request?? to controller?? how to set routes?? is there any way to use flat php instead of controller??

Upvotes: 0

Views: 535

Answers (2)

Aastal
Aastal

Reputation: 350

If you are in a form, you can do something like :

    $(document).submit(function () {
        var url = $('form').attr('action');
        var data = $('form').serialize();

        $.post(url, data, function (data) {
            window.location.href = data.redirect;
        })
            .fail(function () {
                $('form').replaceWith(data.form);
            });
    });

You just need to send the correct url :

    $(document).on('click', 'a', function () {
            var url = window.location.href;

            $.get(url, function (data) {
                $('.container').replaceWith(data);
            });
    });

It is also possible to use a routing generate, simply add: "friendsofsymfony/jsrouting-bundle": "dev-master" to your composer.json.

AppKernel.php :

new FOS\JsRoutingBundle\FOSJsRoutingBundle()

Then config it in your routing.yml :

fos_js_routing:
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"

And finally use "expose" arg in your routing :

@Route("/{table}/index", name="beta.index", options={"expose"=true})

I use annotation routing

In your JS :

var url = Routing.generate('beta.index', { 'table': 'foo' });

Hope it'll help you :)

Upvotes: 0

d23
d23

Reputation: 186

You would pass the request to a controller action exposed using a route: http://symfony.com/doc/current/book/routing.html

Then in your html code, if you are using twig and including javascript in a script tag, you can do

xmlhttp.open("GET","{{ path("route_name", {"parameter_name":"parameter_value"}) }}");

If you want to access the route in an attached .js file, you can use FOSJsRoutingBundle to generate the route url

Upvotes: 2

Related Questions