Select2 使用动态 Ajax URL on call

Select2 use a dynamic Ajax URL on call

我使用带有 Ajax 的 Select2 插件 (v 3.5.2) 来动态加载列表中的元素。

我在 Select2 的初始化(其中 url 属性 设置在 ajax 助手中)和 ajax 调用的时间之间有一个问题制作完成,此 url 可能需要更改。

所以我有这样的东西:

$box.select2({
    containerCssClass: "form-control"
    minimumInputLength: 0,
    allowClear: true,
    ajax: {
       url: someUrl,
       dataType: 'json',
       quietMillis: 100,
...
}

我不知道如何、何时、在何处更改 ajax.url 值,然后再启动。

Select2的帮助说:

Select2 uses jQuery's $.ajax function to execute the remote call by default. An alternative transport function can be specified in the ajax settings, or an entirely custom implementation can be built by providing a custom query function instead of using the ajax helper.

但是我找不到任何关于如何做的例子。

在此先感谢您的帮助。非常感谢。

I can't figure out how, when, where to change the ajax.url value before it launches.

ajax.url 选项可以指定为静态字符串或在 Select2 3.5.x 和 4.0.0.

中返回一个的方法
$("select").select2({
  ajax: {
    url: function () {
      return UrlHelper.RemoteAPI();
    }
  }
});

这对于更改 base URL 很有用,例如当 URL 在运行时确定或以不同的方法自动生成时。如果您需要更改 查询参数 ,例如用于发送搜索词的参数,您需要覆盖 ajax.data 选项。

$("select").select2({
  ajax: {
    data: function (args) {
      // args is the search term in 3.5.x

      // args is an object containing the query parameters in 4.0.0
      // args.term is the search term in 4.0.0
      return {
        search: args.term || args;
      };
    }
  }
});

此处的数据将默认作为查询参数附加,如果方法类型从GET(默认)更改为其他任何内容,将作为请求正文发送。

Select2 uses jQuery's $.ajax function to execute the remote call by default. An alternative transport function can be specified in the ajax settings, or an entirely custom implementation can be built by providing a custom query function instead of using the ajax helper.

但是我找不到任何关于如何做的例子。

Select2 确实允许通过更改 ajax.transport 选项使用不同的 AJAX 传输。

在 3.5.2 中,这必须是一个 $.ajax 兼容的方法,因此它必须能够接受一个包含 successfailure 回调的对象。

$("select").select2({
  ajax: {
    transport: function (args) {
      // args.success is a callback
      // args.failure is a callback

      // should return an object which has an `abort` method.
      return $.ajax(args);
    }
  }
});

在 4.0.0 中,这必须是一个接受 params 对象(传递给 ajax.data 的对象)、success 回调和 failure回调。

$("select").select2({
  ajax: {
    transport: function (params, success, failure) {
      var $request = $.ajax(params);

      $request.then(success);
      $request.fail(failure);

      return $request;
    }
  }
});

非常简单Javascript 处理相同的代码,也可以在 Suitescript(Netsuite) 中使用。

// prepare your dynamic URL inside this method and return
function getURL() {
     return url + params;
}

// While binding the select2 with the dropdown set url to call a anonymous function which internally calls another function.
jQuery("select.itemDropDown").select2({
    placeholder: "Select an item",
    width: "200px",
    minimumInputLength: 3,
    ajax: {
        url: function() {
            return getURL()
        },
        dataType: 'json'
    }
});