2016-05-13 2 views
0

Je veux faire des appels ajax dans symfony2. Je l'ai déjà fait avec ajax avec php plat et je n'ai aucune idée de comment mettre en place dans ce cadre de symfony.Ajax appels dans le cadre de symfony

<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> 

Où devrais-je transmettre cette demande ?? au contrôleur ?? comment définir des itinéraires ?? est-il un moyen d'utiliser php plat au lieu de contrôleur?

+2

Vous pouvez lire le tutoriel: http://intelligentbee.com/blog/2015/01/19/symfony -2-formes-et-ajax / –

Répondre

2

Vous passeriez la demande à une action du contrôleur exposé en utilisant un itinéraire: http://symfony.com/doc/current/book/routing.html

Puis dans votre code html, si vous utilisez brindille et y compris javascript dans une balise de script, vous pouvez faire

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

Si vous souhaitez accéder à la route dans un fichier .js ci-joint, vous pouvez utiliser FOSJsRoutingBundle pour générer l'URL de la route

0

Si vous êtes sous une forme, vous pouvez faire quelque chose comme:

$(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); 
      }); 
    }); 

Vous avez juste besoin d'envoyer l'URL correcte:

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

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

Il est également possible d'utiliser un routage générer, ajoutez simplement: "friendsofsymfony/jsrouting-bundle": "dev-master" à votre composer.json.

AppKernel.php:

new FOS\JsRoutingBundle\FOSJsRoutingBundle()

config Puis dans votre routing.yml:

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

Et enfin utiliser "exposer" arg dans votre routage:

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

J'utilise le routage d'annotation

Dans votre JS:

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

Espérons que ça va vous aider :)