@andreychumak
junior

Почему не выполняется ajax?

Суть такая: я выбираю первый select и в зависимости от значениея value (из первого селекта), у меня строится второй select. т.е. я отправляю get-запрос с параметром code в контроллер и хочу получить в ответ нужный мне массив
Мне нужно получить данные с контроллера. Я так понимаю что для этого лучше использовать $get.
Проблема в том, что при выборе первого селекта ничего в логах не происходит. Если меняю запрос на post, то в логах отправляются данные(это и понятно), но в экшн create.

1) Почему в логах ничего нет? ведь при get запросе я тоже могу отправлять данные
2) как обычно делают в таких ситуациях? какие нибудь best practice для динамического вывода select'а

И есть JS:
// При полной загрузке документа мы начинаем определять события
  $(document).ready(function () {
      // На выборе селекта страны — вешаем событие, функция будет брать значение этого селекта и с помощью ajax запроса получать список городов для вставки в следующий селект
      $('#country_id').change(function () {
          // В переменную country_id положим значение селекта (выбранная страна)
          var country_id = $(this).val();
          // Если значение селекта равно 0, т.е. не выбрана страна, то мы не будем ничего делать
          if (country_id == '0') {
              $('#region_id').html('<option>- выберите город -</option>');
              $('#region_id').attr('disabled', true);
              return(false);
          }
          // Очищаем второй селект с городами и блокируем его через атрибут disabled туда мы будем класть результат запроса
          $('#region_id').attr('disabled', true);
          $('#region_id').html('<option>загрузка...</option>');
          // url запроса городов
          var url = '/baskets';
          //GET'овый AJAX запрос  Данные будем кодировать с помощью JSON
          $.get(
              '/baskets',
              { code: country_id },
              function (result) {
                  // В случае неудачи мы получим результат с type равным error. Если все прошло успешно, то в type будет success, а также массив regions, содержащий данные по городам
                  // в формате 'id'=>'1', 'title'=>'название города'.
                  if (result.type == 'error') {
                      // ошибка в запросе
                      alert('error');
                      return(false);
                  }
                  else {
                      // проходимся по пришедшему от бэк-энда массиву циклом
                      var options = '';
                      $(result.regions).each(function() {
                          // и добавляем в селект по городу
                          options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
                      });
                      $('#region_id').html(options);
                      $('#region_id').attr('disabled', false);
                  }
              },
              "json"
          );
      });
  });
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
удалите
if (country_id == '0') {
              $('#region_id').html('<option>- выберите город -</option>');
              $('#region_id').attr('disabled', true);
              return(false);
          }

и проверьте, начал ли отрабатывать ajax
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы