我想使用自定义标头提供有关响应数据的更多信息。是否可以通过对象存储(dojo 1.7)将dojo数据网格的响应中的头文件连接到jsonRest对象?当你发出XHR请求时,我看到这是possible,但在这种情况下,它是由网格发出的。
API provides响应错误的事件,它返回响应对象:
on(this.grid, 'FetchError', function (response, req) {
var header = response.xhr.getAllResponseHeaders();
});
使用此功能,我可以成功访问自定义响应标头。但是,在请求成功时似乎没有办法获取响应对象。我之前一直在使用undocumented私有事件_onFetchComplete和aspect,但是,这不允许访问响应对象,只是响应值
aspect.after(this.grid, '_onFetchComplete', function (response, request)
{
///unable to get headers, response is the returned values
}, true);
编辑: 我设法得到了一些工作,但我怀疑它是非常过度设计的,有更好理解的人可以提出一个更简单的解决方案。我最后添加了一个方面,允许我获取休息存储中的延迟对象,该对象返回到对象存储区。在这里,我向deffered添加了一个新函数来返回标题。然后我使用dojo hitch连接到对象存储的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);
有更好的方法吗?
答案 0 :(得分:2)
我在阅读这篇文章后今天解决了这个问题,以为我会反馈。
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,并将你自己的监听器附加到它的'response'成员解析中,你可以在其中访问带有头的xhr对象。这应该让你解释JsonRest结果,同时很好地适应查询链()所有调用者。
提醒一句,此代码已修改为在此处发布,并且实际上是继承自另一个也超过query()
的中间类,但这里的基础知识非常合理。
答案 1 :(得分:0)
如果你想要的是从服务器获取信息,那么cookie中的自定义键值也可以是一个解决方案,这是我的情况,首先我是在寻找自定义响应标题,但我无法做到让它工作所以我做了cookie方式获取网格数据后的信息:
dojo.connect(grid, "_onFetchComplete", function (){
doSomethingWith(dojo.cookie("My-Key"));
});
这对于为分页数据网格中的所有行呈现SUM(字段)非常有用,而不仅仅是当前页面中包含的那些行。在服务器中,您可以获取COUNT和SUM,COUNT将在Content-Range标头中发送,SUM可以在cookie中发送。