2017-01-24 43 views
0

我正在使用Select2内置AJAX加载一个小项目列表。 Select2在第一次选择时加载整个列表(良好),但每次用户尝试将其选择或类型更改为筛选项时都会重新加载JSON订阅源(并且这意味着每个键入的信件都会有一个新的AJAX请求!)。使Select2只读取一次数据

A request is being triggered on every key stroke, can I delay this?,我们可以读到:

默认情况下,每当用户 改变了他们的搜索词,选择二将触发新的AJAX请求。您可以使用ajax.delay选项设置删除 请求的时间限制。

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

这会告诉Select2在将请求发送到您的API之前等待250毫秒。

......但它没有。认真。我也尝试过在示例中显示的未公开的minimumInputLength属性,但它似乎没有做任何事情。

甚至有可能让Select2只读取一次数据?

+0

我想这个库只是没有设计工作的方式。 –

回答

0

它正在为我工​​作。我使用大的延迟测试了它:delay: 3000 AJAX reqeust确实在最后一次击键后3秒后延迟。 使用退格键删除字符时也可以使用。 我正在使用select2.full.js v4.0.3。希望这可以帮助。

0

让我知道,如果这个解决方案会为你工作:

1)一个onchange动作绑定到你选择的元素:

 <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 
      } 
     }