Получение выбранного значения selectBox с помощью jQuery / ajax в проекте Symfony 3

Ранее я разместил вопрос о возможности получить выбранное значение selectBox и назначить его службе, вызываемой в twig. После некоторого исследования мне удалось реализовать то, что предлагали здесь некоторые ребята.

Используя ajax, я отправил выбранное значение своему php-контроллеру, который отправил выбранное значение в мой интерфейс, и yéy twig может видеть переменную!

вот вызов ajax:

 <script>
     $(document).ready(function () {
         $('listFolders1').on('change', function() {
             var selected = $('#listFolders1 :selected').text();
             $.ajax({
                 type: "POST",
                 url: "{{ path('ess') }}",
                 data: selected,
                 success: function (response) {
                     console.info(response);
                 },
                 error: function (response, xhr, status) {
                     alert("error" + status);
                 }
            });
        });
    });
</script>

а вот мой контроллер

public function essAction(Request $request)
{
    $data = $request->request->get('data');
    return $this->render('PrestaShopTestBundle:Test:full.html.twig', array(
        'data' => $data,
    ));
   //return new Response($data);
}

и конечно это мой файл маршрутизации

ess:
path:    /ess
defaults: { _controller: PrestaShopTestBundle:Test:ess }

Я пытаюсь отобразить свою переменную вот так в ветке

{% if data is defined %}
              {{ data }}
          {% endif %}

ошибок нет, он меня просто ИГНОРИРУЕТ. Ничего не происходит, даже URL-адрес не меняется.

PS: ListFolders - это мой SelectBox

Ваша переменная data неверна. Вы должны передать действительный объект, чтобы он появился в вашей переменной $_POST, например. data : { 'selected': selected },, это заставит $_POST содержать индекс selected с выбранным значением

DarkBee 28.08.2018 08:57

да, это помогло :) теперь я могу отображать свои данные в консоли .. но все еще не могу получить к ним доступ через ветку :(

kmar akrout 28.08.2018 09:10

В обратном вызове успеха вы помещаете код для обновления вашего интерфейса, например: success: function(response) { $('#ess').html(response); },. Вы уже получили доступ и обработали свой запрос ajax с помощью twig внутри действия essAction. Эта часть уже выполнена, этот запрос ajax теперь получил вывод essAction обратно в javascript. Что вам теперь нужно отобразить.

DarkBee 28.08.2018 09:28

да, я могу это сделать ... я могу отобразить это в div, моя проблема в том, что я хочу назначить его переменной веточки, такой как эта {% set data = data%}, а этого не происходит :(

kmar akrout 28.08.2018 09:32

Это просто невозможно. Вы должны понимать, что twig - это технология на стороне сервера, twig компилируется в PHP, которые интерпретируются на сервере и затем отправляются клиенту. Это означает, что весь twig / php уже обработан, прежде чем пользователь сможет что-либо изменить в нем. Единственное, что теперь можно обойтись без перезагрузки страницы (и использования сеанса или хранилища любого типа), - это использовать ajax и соответствующим образом обновить интерфейс.

DarkBee 28.08.2018 09:36

хорошо .. спасибо, по крайней мере, я узнал что-то новое .. мне придется подумать о другом алгоритме для выполнения моей задачи .. большое спасибо: D

kmar akrout 28.08.2018 09:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
291
0

Другие вопросы по теме