我想知道是否有任何方法可以在自动执行JsonRest存储的Get ajax请求(xhr.get)中设置自己的自定义http标头。

有一个相关主题,但没有很好的解决方案:
Dojo Data grid with custom HTTP headers

我已经在'dojo.store.JsonRest'中看到了JsonRest实现,包括构造函数,我们是否可以做到这一点并不明显(但我不这么认为)。正在使用的JsonRest商店示例:

var store = new JsonRestStore({target: "/Table/" });

最佳答案

如您在this jsFiddle中所见,我将完成对dojo.store.JsonRest的子类化。

A.子类​​dojo.store.JsonRest

var MyJsonRest = declare(JsonRest, {

    get: function(id, options) {
        return this.inherited(
            arguments,
            [id, lang.mixin(this.defaultGetHeaders, options)]
        );
    }
});


因此,您可以覆盖调用超类的getget方法,但是第二个参数options(即标头)现在还将包含this.defaultGetHeaders的属性。

B.在构造函数中定义defaultGetHeaders

var myJsonRest = MyJsonRest({
    target: "/echo/json/",
    defaultGetHeaders: {
        userId: "xyz",
        requestedBy: "abc",
        requestedFrom: "123"
    }
});


C.调用myJsonRest.get()方法,您还可以覆盖默认标题:

myJsonRest.get("someId", { requestedFrom: "321"}).then(function(result) {
    console.log(result);
});


D.检查请求标头:

08-08 08:17