如何访问select2中的HTTP响应头

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)