我无法弄清楚在启动之前如何、何时、在何处更改 ajax.url 值。
该ajax.url
选项可以指定为静态字符串或在 Select2 3.5.x 和 4.0.0 中返回一个的方法。
$("select").select2({
ajax: {
url: function () {
return UrlHelper.RemoteAPI();
}
}
});
这对于更改基本 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 的 $.ajax 函数来执行远程调用。可以在 ajax 设置中指定替代传输函数,或者可以通过提供自定义查询函数而不是使用 ajax 帮助器来构建完全自定义的实现。
但我找不到任何关于如何做到这一点的例子。
ajax.transport
Select2 确实允许通过更改选项来使用不同的 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;
}
}
});