2015-12-01 10 views
1

Я работаю над проектом Symfony2. И теперь хочу добавить некоторые динамические действия. Я хочу использовать вызовы jQuery и Ajax и API.Symfony - Ajax and Twig

Ниже я написал свою модель проекта. my model

Проблема там, где я положил «?» на картинке.

Например, у меня есть комментарии на моей странице и 2 кнопки "oldest" "newest".

В основном на странице загрузите комментарий TWIG на мой взгляд, и все работает нормально. Затем я хочу нажать кнопку, чтобы изменить способ отображения комментариев. Но вы хотите сделать это без перезагрузки страницы. Я нажимаю btn -> запустить JavaScript -> подключить byt AJAX с контроллером API -> вернуть данные из базы данных ... И вот я застрял

У меня есть данные в JSON, но я понятия не имею, как загрузить их в мой вид вместо этого дата, загруженная Twig в начале.

Это серьезная стена на моем пути к динамическим изменениям на веб-странице. Думая о:

  • Создание все представление в JavaScript и заменить данные хворостины на представлении с помощью JQuery, как .html() или что-то - но там будет много HTML кода в сценарии JavaScript, не уверен, что это правильно путь

Возможно, вы знаете, как решить эту проблему более элегантным способом?

ответ

0

Это не Twig, а проблема JQuery. Вот пример.

Маршрут:

my_symfony_route: 
    path:  /get-filtered-list 
    defaults: { _controller: "CompanyMyBundle:Comment:getFilteredList" } 
    methods: POST 

Контроллер

public function getFilteredListAction(Request $request) 
{ 
    $param1= $request->request->get('param1'); 
    $param2= $request->request->get('param2'); 

    $result = array(); 
    //Fill $result with DB request 

    return new JsonResponse($result); 
} 

JQuery запрос

$.ajax({ 
    type: 'POST', 
    url: "{{ path('my_symfony_route') }}", 
    data: { param1: 'value', param2: 'value' }, 
    dataType: 'json', 
    success: function (data) { 
     //Handle your JSON data to update the DOM 
     $.each(data, function(index, element) { 
      $('#myDivId').append($('<div>', { 
       text: element.name 
      })); 
     }); 
    } 
}); 
+0

sdespont: спасибо за ответ, теперь я думаю, что я буду обращаться. Еще один вопрос. Если мне нужно создать много HTML-кода в ответ, где я должен хранить этот код? В JS scrpit? Не хотите путаться в моем проекте и хотите подвести веб-стандарты. Спасибо –

+1

@RadekS Я бы поместил фрагмент html в функцию JS, вызванную в обратном вызове AJAX. Или лучше, используя функцию JQuery 'load'. Таким образом, функция загрузки вызывает стандартный URL-адрес, который отображает ваш фрагмент по вашему желанию и помещает его в div. https://api.jquery.com/load/ – sdespont