Dojo datagrid jsonrest 响应 header

标签 dojo http-headers dojox.grid

我想使用自定义 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/

相关文章:

javascript - 为什么连接的 onclick 事件不触发?

ios - 如何解决这个问题 "Ambiguous reference to member ' dataTask(with :completionHandler: )' "

javascript - Dojox EnhancedGrid 中的空格键

javascript - Sort(a,b) 在 Dojo.dnd.source 中不起作用

javascript - dojox.mobile.ListItem OnClick 不起作用

javascript - 使用 dojo 更改 <div> 的 CSS 类

php - 使用 FPDF PHP 时出现奇怪的字符?

android - 如何将编码设置为Http Post请求android

dojo - 将数据网格设置为每页仅显示 5 行

javascript - 当我使用间接选择在 dojo 中的增强网格中单击一行时,如何自动选中复选框