2017-01-26 4 views
0

У меня есть проблема с компонентом Select2 в этом коде:Выбор2 несколько вызовов AJAX

$("#group_select_name").select2({ 
    placeholder: "Select a Group", 
    allowClear: true, 
    ajax: { 
    type: "GET", 
    url: "../contactGroup", 
    contentType: "application/json; charset=utf-8", 
    dataType: 'json', 
    processResults: function(data) { 
     return { 
     results: $.map(data, function(obj) { 
      console.log("update 2") 
      return { 
      id: (obj.id), 
      text: (obj.name) 
      }; 
     }) 
     }; 
    }, 
    } 
}); 

Все работает отлично, но когда я пытаюсь искать что-то с помощью поля поиска, компонент сделать несколько нежелательную AJAX запросы к серверу. В консоли браузера я вижу тысячи «обновлений 2».

Версия Select - это 4.0.3. Какие-либо предложения?

ответ

3

Это потому, что компонент подает запрос на каждую нажатую клавишу. Вы можете задать задержку для запуска запроса, как описан в официальном документе:

По умолчанию Выбор2 запустит новый запрос AJAX, когда пользователь изменяет свое слово для поиска. Вы можете установить лимит времени для отладки запросов с использованием параметра ajax.delay.

https://select2.github.io/options.html#a-request-is-being-triggered-on-every-key-stroke-can-i-delay-th

$('select').select2({ 
    ajax: { 
    url: '/example/api', 
    delay: 250 
    } 
}); 

[EDIT]

Ваш console.log находится внутри функции map, который будет выполняться для каждого элемента в результате после каждого запроса.

+0

Как остановить это поведение? Мне это не нужно. Также функция поиска не работает правильно. –

+0

Вы можете написать собственный 'транспорт', используя функцию' debounce' библиотеки 'underscore'. – rogeriolino

+0

Хорошо. Но почему поле поиска не работает? –

Смежные вопросы