我使用带有Ajax的Select2插件(v 3.5.2)来动态加载列表中的元素。
我在Select2的初始化(在ajax帮助器中设置url属性)和ajax调用的时间之间存在问题,可能需要更改此URL。
所以我有这样的事情:
$box.select2({
containerCssClass: "form-control"
minimumInputLength: 0,
allowClear: true,
ajax: {
url: someUrl,
dataType: 'json',
quietMillis: 100,
...
}
我无法确定在ajax.url
值发布前如何,何时,何地更改。{/ p>
Select2的帮助说:
Select2使用jQuery'
$.ajax
函数默认执行远程调用。可以在transport
设置中指定备用ajax
函数,也可以通过提供自定义query
函数而不是使用ajax帮助程序来构建完全自定义的实现。
但我找不到任何关于如何做的例子。
提前感谢您的帮助。非常感谢。
答案 0 :(得分:19)
我无法弄清楚在启动之前如何,何时,何地更改ajax.url值。
可以将ajax.url
选项指定为静态字符串或在Select2 3.5.x和4.0.0中返回一个的方法。
$("select").select2({
ajax: {
url: function () {
return UrlHelper.RemoteAPI();
}
}
});
这对于更改基本URL 非常有用,例如,在运行时确定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使用jQuery&#39a $ .ajax函数默认执行远程调用。可以在ajax设置中指定备用传输函数,或者可以通过提供自定义查询函数而不是使用ajax帮助程序来构建完全自定义的实现。
但我找不到任何关于如何做的例子。
Select2允许通过更改ajax.transport
选项来使用不同的AJAX传输。
在3.5.2中,这必须是$.ajax
兼容的方法,因此它必须能够获取包含success
和failure
回调的对象。
$("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;
}
}
});
答案 1 :(得分:2)
非常简单的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'
}
});