Изменить удаленный URL на основе поискового запроса

1

У меня есть поле select2, которое извлекает данные из удаленного api. Я могу заставить это работать. То, что я пытаюсь сделать, это изменить удаленный url на основе того, что пользователь набрал. Если первые две буквы напечатаны, например, "AA", то поиск с использованием URL-адреса, а когда первые два символа "88", выполните поиск с использованием другого URL-адреса.

Это мой код:

this.selector.select2({
     minimumInputLength: 2,
     ajax: {
         url: function(param){return 'http://localhost:3000/suggestions?&'},
         dataType: 'json' ,
         data: function (params) {


      var query = {
       search: params.term,
      }
      return query;
    },
          processResults: function(data) {
            var results = []; 
            $.each(data, function (index, search) {
                 results.push({
                     id: search.id,
                     text: search.val
                 });
             });

             return {
              "results":results
             };                            
         },

     },

     width: 'resolve',
  }); 

Я посмотрел, но не могу найти событие, которое запускается при вводе (поиске).

  • 1
    Тег [jquery-select2-4] относится к jQuery Select2 4.0, который является полным переписыванием jQuery Select2. Пожалуйста, удалите либо [jquery-select2] или [jquery-select2-4]
  • 0
    @JamesDouglas спасибо. обновил его
Теги:
jquery-select2-4

2 ответа

1
Лучший ответ

Согласно документам аргумент params, переданный на обратный вызов url, такой же, как и в обратном вызове данных. Таким образом, вы можете переписать свой код как:

this.selector.select2({
  minimumInputLength: 2,
  ajax: {
    url: function (params) {
      var firstTwoLetters = params.term.slice(0, 2);
      if (firstTwoLetters == '88') {
        return 'some url';
      } else if (firstTwoLetters == 'AA') {
        return 'another url'
      } else {
        return 'http://localhost:3000/suggestions?&'
      }
    },
    dataType: 'json',
    data: function (params) {
      var query = {
        search: params.term,
      }
      return query;
    },
    processResults: function (data) {
      var results = [];
      $.each(data, function (index, search) {
        results.push({
          id: search.id,
          text: search.val
        });
      });

      return {
        "results": results
      };
    },

  },

  width: 'resolve',
});
  • 0
    Спасибо! Работает отлично :)
1

Надеюсь, я правильно понял ваш последний запрос.

Событие oninput происходит по мере ввода.

примечание: я бы скорее прокомментировал это и не использовал ответ, однако у меня меньше 50 реп.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню