在 Backbone.js 提取完成后获取响应标头

ogsagwnx  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(186)

我需要读取backbone.js fetch方法发出的 AJAX 请求中的响应标头。如果我覆盖fetch方法,是否有办法读取标头:

var PageCollection = Backbone.Collection.extend({

    url: 'http://localhost/cms?_mn=Mod_Admin&_mf=getAllPages',

    model: PageModel,

    fetch: function (options) {
        Backbone.Collection.prototype.fetch.call(this, options);
        // The above line of code works and fetch the dataset 
        // BUT how i can read the response headers at this point
    }
});
z9ju0rcb

z9ju0rcb1#

使用“success”回调来获取xhr对象,这样您就能够获取所有的响应头:

collection.fetch({
    success: function (collection, response, options) {
        options.xhr.getAllResponseHeaders(); // To get all the headers
        options.xhr.getResponseHeader('header_name'); // To get just one needed header
    }
});
sd2nnvve

sd2nnvve2#

Backbone fetch()方法返回一个jqXHR对象。您可以在该对象上调用done()来添加一个回调函数,该回调函数将在请求完成时被调用。然后在同一个jqXHR对象上使用getResponseHeader()方法来获取您感兴趣的标头的值,或者调用getAllResponseHeaders()来获取所有标头。
因此,在重写fetch()方法时,您可以执行以下操作:

var jqXHR = Backbone.Collection.prototype.fetch.call(this, options);
jqXHR.done(function() {
    // Get all headers:
    console.log('All headers:', jqXHR.getAllResponseHeaders());
    // Or get a specific header:
    console.log('Content-Length:', jqXHR.getResponseHeader('Content-Length'));
});
pn9klfpd

pn9klfpd3#

看看我实现以及如何使用parse函数

var CustomPageCollection = Backbone.Collection.extend({
    model: CustomPage,
    url: '/pb/editor/pages',
    parse: function(resp, xhr) {
        this.paginationInfo = JSON.parse(xhr.getResponseHeader('X-Pagination-Info'));
        return resp.items;
    }
});
kg7wmglp

kg7wmglp4#

我发现了一个更好的方法:当从服务器返回时,集合触发“parse”函数BakcboneJs - collection Parse

parse:function(a,b,c){      
    console.log("a",a);
    console.log("b",b);
    console.log("c",c);
},

我们伙伴最好的情况是:)

相关问题