如何将自定义 HTTP header 添加到 BackboneJS 模型中的所有 AJAX 调用?

How to add custom HTTP header to all AJAX calls in BackboneJS models?

我正在开发一个 backbonejs 应用程序,它对所有模型数据使用 RESTful API。我需要能够将用于身份验证的客户 HTTP header 传递给通过模型的 fetch()、save() 等进行的所有 ajax 调用,其中包括一个 localStorage 项。

我知道如何为每个人传递 header,但如果没有一遍又一遍地 copying/pasting 相同的代码,我想不出一种方法来为所有调用执行此操作。我已经阅读了一些关于覆盖 backbonejs 同步的内容,但我不太明白我该怎么做。

我决定创建一个 'BaseModel',我的所有其他模型都会从中扩展,我认为这可能是一种简单的方法(它让我的 api url根)。

这是我的模型的基础知识:

基础模型:

var Backbone = require("backbone");

// Declare our options we'll use to extend the base view
var modelOptions = {
apiUrl: 'api.php/v1.1',
};

// Export our extended view
module.exports = Backbone.Model.extend(modelOptions);

示例模型:

var BaseModel = require("./baseModel");

// Declare our options we'll use to extend the base view
var modelOptions = {
    initialize: function() {
        this.url = this.apiUrl+'/Cars';
    },
};
// Export our extended view
module.exports = BaseModel.extend(modelOptions);

我相信您可以通过 jQuery 设置全局 AJAX header,例如:

$.ajaxSetup({
    headers: yourCustomHeader
}); 

Backbone.$.ajaxSetup({
    headers: yourCustomHeader
});
$.ajaxSetup({
    headers: { 'custom-header': ' value' }
});

此外,您可以向每个请求添加一个 header(或一组 header),然后将 beforeSend 挂钩与 $.ajaxSetup():

一起使用
$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('custom-header', 'value');
    }
});