2012-12-19 103 views
2

我想使用自定義標頭來提供有關響應數據的更多信息。是否有可能通過對象存儲(dojo 1.7)將dojo datagrid的響應中的頭部連接到jsonRest對象?我在看到XHR請求時發現這是possible,但在這種情況下,它是由網格生成的。Dojo datagrid jsonrest響應標頭

API provides爲返回的響應對象的響應錯誤事件:

on(this.grid, 'FetchError', function (response, req) { 
     var header = response.xhr.getAllResponseHeaders(); 
    }); 

使用這個我能夠成功訪問我的自定義響應頭。但是,當請求成功時,似乎沒有辦法獲取響應對象。我一直使用undocumented私人活動_onFetchComplete縱橫後,但是,這並沒有允許訪問響應對象,只是響應值

aspect.after(this.grid, '_onFetchComplete', function (response, request) 
{ 
///unable to get headers, response is the returned values 
}, true); 

編輯: 我設法得到的東西的工作,但我懷疑它是非常過分的設計和一個更好的理解的人可以拿出一個更簡單的解決方案。我最後添加了方面,讓我能夠在返回到對象存儲的其餘存儲中獲取延遲對象。在這裏,我添加了一個新的函數來返回頭文件。然後我使用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); 

有沒有更好的方法?

回答

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()功能,讓它執行並返回其承諾,並附上自己的監聽器,它的「響應」成員解決,在其中您可以訪問具有頭XHR對象。這應該讓你解釋JsonRest結果,同時很好地適應query()所有調用者的鏈。

一個字的警告,這段代碼被修改爲張貼在這裏,實際上從另一箇中介類繼承,也覆蓋了query(),但這裏的基礎是非常合理的。

+1

這將在標準json商店:var results = this.inherited(arguments); (function(){ var headers = results.ioArgs.xhr.getResponseHeader('my-header'); }); –

0

如果你想要的是從服務器獲取信息,cookie中的自定義鍵值也可以是解決方案,這是我的情況,首先我正在尋找一個自定義響應頭,但我無法它的工作,所以我做的餅乾方式獲得信息後的網格數據是牽強:

dojo.connect(grid, "_onFetchComplete", function(){ 
    doSomethingWith(dojo.cookie("My-Key")); 
}); 

例如向在場的所有行的SUM(場)的分頁數據網格,而不是隻有那些包含這是非常有用在當前頁面中。在服務器中,您可以獲取COUNT和SUM,COUNT將在Content-Range標頭中發送,SUM可以在cookie中發送。