2016-05-13 2 views
0

Я хочу сделать ajax звонки в symfony2. Я уже сделал с ajax с плоским php, и я понятия не имею, как настроить эту концепцию symfony.Ajax вызывает в 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> 

Куда я должен пройти этот запрос ?? к контроллеру ?? Как настроить маршруты? есть ли способ использовать плоский php вместо контроллера ??

+2

Вы можете прочитать учебник: http://intelligentbee.com/blog/2015/01/19/symfony -2-форм-и-Ajax / –

ответ

2

Вы бы передать запрос на действие контроллера экспонируется с использованием маршрута: http://symfony.com/doc/current/book/routing.html

Затем в HTML коде, если вы используете прутик и включая JavaScript в теге сценария, вы можете сделать

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

Если вы хотите получить доступ к маршруту в приложенном файле .js, вы можете использовать для создания FOSJsRoutingBundle маршрута URL-адресу

0

Если вы в форме, вы можете сделать что-то вроде:

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

Вам просто нужно отправить правильный URL:

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

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

Также можно использовать маршрутизацию генерации, просто добавьте: "friendsofsymfony/jsrouting-bundle": "dev-master" к вашему composer.json.

AppKernel.php:

new FOS\JsRoutingBundle\FOSJsRoutingBundle()

Затем сконфигурировать его в routing.yml:

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

И, наконец, использовать "разоблачить" ARG в вашей маршрутизации:

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

Я использую маршрутизацию аннотаций

В ваших JS:

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

Надеется, что это поможет :)

 Смежные вопросы

  • Нет связанных вопросов^_^