我想使用自定义 header 来提供有关响应数据的更多信息。是否可以从通过对象存储连接到 jsonRest 对象的 dojo 数据网格(dojo 1.7)获取响应中的 header ?我看到这是possible当您发出 XHR 请求时,但在本例中它是由网格发出的。
API provides响应错误的事件,返回响应对象:
on(this.grid, 'FetchError', function (response, req) {
var header = response.xhr.getAllResponseHeaders();
});
使用这个我可以成功访问我的自定义响应 header 。但是,当请求成功时,似乎没有办法获取响应对象。我一直用undocumented私有(private)事件 _onFetchComplete 与 after 方面,但是,这不允许访问响应对象,只允许访问响应值
aspect.after(this.grid, '_onFetchComplete', function (response, request)
{
///unable to get headers, response is the returned values
}, true);
编辑: 我设法让一些东西发挥作用,但我怀疑它的设计过度了,有更好理解的人可以想出一个更简单的解决方案。我最终添加了方面,以允许我获取返回到对象存储的其余存储中的延迟对象。这里我向 defered 添加了一个新函数来返回 header 。然后,我使用 dojo hook 连接到对象存储的 onFetch(因为我需要当前范围内的结果)。我觉得很乱
aspect.around(restStore, "query", function (original) {
return function (method, args) {
var def = original.call(this, method, args);
def.headers = deferred1.then(function () {
var hd = def.ioArgs.xhr.getResponseHeader("myHeader");
return hd;
});
return def;
};
});
aspect.after(objectStore, 'onFetch', lang.hitch(this, function (response) {
response.headers.then(lang.hitch(this, function (evt) {
var headerResult = evt;
}));
}), true);
有更好的方法吗?
最佳答案
我今天在阅读这篇文章后解决了这个问题,我想我会反馈。
dojo/store/JsonRest
也解决了这个问题,但我的代码最终略有不同。
var MyStore = declare(JsonRest, {
query: function () {
var results = this.inherited(arguments);
console.log('Results: ', results);
results.response.then(function (res) {
var myheader = res.xhr.getResponseHeader('My-Header');
doSomethingWith(myheader);
});
return results;
}
});
因此,您重写正常的 query()
函数,让它执行并返回其 promise ,并将您自己的监听器附加到其“响应”成员解析,在其中您可以访问该 xhr 对象有标题。这应该可以让您解释 JsonRest 结果,同时很好地融入 query() 所有调用者的链中。
警告一句,这段代码经过修改后发布在此处,实际上是从另一个也重写了 query()
的中间类继承的,但这里的基础知识非常健全。
关于Dojo datagrid jsonrest 响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957348/