【问题标题】:Select2 multiple calls to ajaxSelect2多次调用ajax
【发布时间】:2017-01-26 10:40:00
【问题描述】:

我对这段代码中的 Select2 组件有疑问:

$("#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。有什么建议吗?

【问题讨论】:

    标签: jquery ajax jquery-select2 jquery-select2-4


    【解决方案1】:

    这是因为组件对每个按下的键都发出请求。您可以定义启动请求的延迟,如官方文档中所述:

    默认情况下,Select2 将触发一个新的 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
      }
    });
    

    [编辑]

    您的console.logmap 函数内,将在每次请求后对结果中的每个元素执行。

    【讨论】:

    • 如何阻止这种行为?我不需要这个。搜索功能也无法正常工作。
    • 您可以使用underscore库的debounce函数编写自己的transport
    • 我已将 ajax 示例更改为使用自定义 transport,请看:jsfiddle.net/rogeriolino/s40uo4p1
    猜你喜欢
    • 2018-10-15
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多