2017-01-24 5 views
0

작은 항목 목록을로드하려면 Select2 builtin AJAX를 사용하고 있습니다. Select2는 첫 번째 선택시 전체 목록을로드하지만 사용자가 선택 항목을 변경하거나 항목을 필터링하기 위해 입력 할 때마다 JSON 피드를 다시로드합니다. 이는 입력 된 각 문자에 대해 새로운 AJAX 요청을 의미합니다.Select2를 한 번만 데이터 가져 오기

A request is being triggered on every key stroke, can I delay this?에서 우리는 읽을 수 있습니다 : 사용자 가 검색어를 변경할 때마다 기본적으로

는, 선택 2는 새로운 AJAX 요청을 트리거합니다. ajax.delay 옵션을 사용하여 개의 요청을 버리는 시간 제한을 설정할 수 있습니다.

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

이렇게하면 요청을 API로 보내기 전에 Select2가 250 밀리 초 동안 대기하게됩니다.

...하지만 그렇지 않습니다. 진지하게. 또한 예제에 표시된 문서화되지 않은 minimumInputLength 속성을 시도했지만 아무 것도하지 않는 것 같습니다.

Select2 페치 데이터를 한 번만 만들 수 있습니까?

+0

라이브러리가 그런 식으로 작동하도록 설계되지 않았다고 가정합니다. –

답변

0

나를 위해 일하고있다. 큰 지연을 사용하여 테스트했습니다 : delay: 3000 AJAX 요구 사항은 실제로 마지막 키 입력 이후 3 초 후에 지연됩니다. 백 스페이스 키로 문자를 삭제할 때도 작동합니다. select2.full.js v4.0.3을 사용하고 있습니다. 희망이 도움이됩니다.

1) 선택 요소에 onChange가 동작을 결합 :

0

이 솔루션은 당신을 위해 일하는 것이 알려줘

 <select name="variable" onChange="loadyourlist($('option:selected',this).val());"> 
      <option value="#">Select State</option> 
      <option value="1">State 1</option> 
     </select> 

2) loadyourlist 기능 내부 요청을 확인하지만, 있는지 확인 이전에 호출되었습니다 :

 window.called = 0; //initial state 

     function loadyourlist(value){ 
      if(!window.called){ //not called before 
       //make your ajax call 
       window.called = 1; //increment to avoid furter calls 
      } 
     }