Fyn*_*ynn 0 ajax jquery http-headers jquery-select2
我正在使用select2来构建带有延迟附加结果列表的选择框。但是,分页数据(例如总项目数)不是 JSON 响应的一部分。因此,我无法在ajax.results函数中访问它们。相反,分页数据是 HTTP 响应标头的一部分。
select2的ajax中是否内置了某种拦截机制,以便我可以访问HTTP标头并将它们写入实际结果数据中?
小智 5
@fynn 的答案在 Select2 4.x 中不再有效,这里有一个例子。
它检查X-Page(当前页码,例如“1”)和X-Total-Pages(例如“5”)标题。如果这些中不存在它也检查一个Link与首标rel=next在作为https://developer.github.com/v3/#pagination
$(".js-data-example-ajax").select2({
ajax: {
url: '/path/to/index.json',
dataType: 'json',
delay: 250,
data: function (params) {
// Returns the query params that should be passed to the server
return {
q: params.term, // search term
page: params.page
};
},
transport: function(params, success, failure) {
// Custom transport lets us get pagination info stored in the headers.
// Check for X-Page and X-Total-Pages, and alternatively for Link rel=next
var read_headers = function(data, textStatus, jqXHR) {
var more;
var current_page = parseInt(jqXHR.getResponseHeader('X-Page')) || 0;
var total_pages = parseInt(jqXHR.getResponseHeader('X-Total-Pages')) || 0;
var link = jqXHR.getResponseHeader('Link') || '';
if ((current_page < total_pages) || (link.search(/<([^>]+)>;\s*rel\s*=\s*['"]?next['"]?\s*(,|$)/i) > -1)) {
more = true;
}
else {
more = false;
}
return {
results: data,
pagination: {
more: more
}
};
};
var $request = $.ajax(params);
$request.then(read_headers).then(success);
$request.fail(failure);
},
cache: true
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |