Данные не отображаются в раскрывающемся списке, используя select2 с AJAX и даже я не могу выбрать какие-либо данные - PullRequest
0 голосов
/ 16 октября 2018

Привет, ребята, я работаю с Select2 с ajax, проблема в том, что данные не отображаются в раскрывающемся списке, когда я нажимаю на опцию.Кроме этого, когда я пытаюсь найти какую-то конкретную вещь.Данные обрабатываются, но не отображаются в раскрывающемся списке.Я проверил данные в console.log(), они корректно отображаются до или после поиска дополнительной информации. Я поделюсь своим кодом, посмотрю и сообщу о проблеме.

script:

$(document).ready(function() {
      $('#user-list').select2({
        ajax: {
          url: "<?php echo base_url() . 'User_basic/fetch_mobile_numbers'; ?>",
          dataType: 'json',
          type: "post",
          delay: 250,
          data: function (params) {
           return {
             searchTerm: params.term // search term
           };
          },
          processResults: function (response) {
           console.log(response);
           return {
            results: response
          };
        },
       }
    });
 });

Просмотр:

<select name="phone_number" id="user-list" placeholder="Enter Number" class="form-control" multiple="multiple" required>
   <option value="" id="numbers-list"></option>
</select>

Пример ответа JSON

[{"phone":"+924444444444"},
{"phone":"+926666666660"},
{"phone":"+92000000600"},
{"phone":"+923665588975"},
{"phone":"+929966557711"},
{"phone":"+92255663377"},
{"phone":"+921155775544"},
{"phone":"+925588665544"}]

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Попробуйте сделать опции выбора на стороне контроллера и отправьте html из контроллера в файл представления, а затем на стороне просмотра просто сделайте простой div и передайте этот html этому div.Надеюсь, это поможет вам

0 голосов
/ 16 октября 2018

Документация по https://select2.org/data-sources/formats гласит:

Select2 ожидает очень специфический формат данных .... Каждый объект должен содержать, как минимум, id и свойство text .

(выделено жирным шрифтом)

Ваш объект JSON не содержит ни одно из этих свойств.Таким образом, select2 не знает, что делать с информацией, которую вы ей предоставляете.Он не ожидает «телефонного» свойства и не будет его искать.Он специально ищет поля, упомянутые в документации, и ничего более.

Данные, которые вы предоставляете select2, должны выглядеть примерно так:

[
  {"id": 1, "text":"+924444444444"},
  {"id": 2, "text":"+926666666660"},
  {"id": 3, "text":"+92000000600"},
  {"id": 4, "text":"+923665588975"},
  {"id": 5, "text":"+929966557711"},
  {"id": 6, "text":"+92255663377"},
  {"id": 7, "text":"+921155775544"},
  {"id": 8, "text":"+925588665544"}
]

Вы, вероятно, можете вложить все, что захотитеполе «id», но оно должно быть там, а значения должны быть уникальными.

В идеале вы должны изменить свой код на стороне сервера, чтобы напрямую предоставлять JSON в этом формате.Если по какой-либо причине это невозможно, вам придется написать некоторый код в функции JavaScript processResults для преобразования данных, прежде чем передавать их в select2.

...