如何ignore/clear Excel Task Pane App缓存?
How to ignore/clear Excel Task Pane App cache?
我正在使用 Office JavaScript API 为 Excel 编写任务窗格应用程序。在这个应用程序中,我从其他服务器请求数据并在 Excel worksheet 中显示此数据。作品的改动sheet也可以上传到服务器。请求是对代理的简单 ajax 调用。代理会将此请求转发给服务器。到目前为止效果很好。
但是请求缓存在 Excel 应用程序的某处。改完之后,刷新后worksheet里面还是显示没有变化的数据。但是数据在服务器端发生了变化。它不会向代理发送新请求,因此它会缓存在应用程序中。如果我使用 Chrome 和 Firefox 调用该应用程序,它工作正常。这里没有缓存。
是否可以避免Office App 中的缓存?或者我可以手动触发缓存的 invalidation/clear 吗?
编辑:
未更改数据是什么意思:我更改了 excel table 中的某些内容并将此数据上传到服务器。如果我现在刷新 excel sheet 中的数据,它会显示更改前的数据,因为它在某个地方缓存了第一个请求的数据并使用了它们。它不会再次调用服务器来获取具有更改值的数据。希望这个解释能有所帮助。
可以在此处添加一些代码示例,但我认为它们不会有很大帮助。
通过ajax调用获取数据的方法。当我刷新 excel 应用程序中的数据时,此方法仍会被调用并运行抛出回调,但请求不会到达代理服务器。
_downloadPeriods: function _downloadPeriods(sParameters) {
var oController = this;
...
var url = '/Proxy/RequestHandler.ashx/MaintainPeriodsExcelSet' + sParameters;
// ajax request to load the data from the sap backend server via the proxy
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
success: function success(oData) {
// create a material collection from the data
oController.resetMaterialCollection();
var oMaterialCollection = oController.getMaterialCollection();
oMaterialCollection.updateData(oData.d.results);
// insert data into the excel worksheet
try {
oController._updateExcelTable(oMaterialCollection);
} catch (e) {
// error handling
}
fnCallback();
},
error: function error(oErr) {
// error handling
}
});
},
我已经在代理中设置了缓存 headers,但它仍然缓存在 excel 应用程序的某处。
...
context.Response.Headers["cache-control"] = "private, max-age=0, no-cache";
...
在 ajax 中禁用缓存就成功了。
$.ajax({
type: 'GET',
url: url,
cache: false,
dataType: 'json',
success: function success(oData) {
...
},
error: function error(oErr) {
// error handling
}
});
我正在使用 Office JavaScript API 为 Excel 编写任务窗格应用程序。在这个应用程序中,我从其他服务器请求数据并在 Excel worksheet 中显示此数据。作品的改动sheet也可以上传到服务器。请求是对代理的简单 ajax 调用。代理会将此请求转发给服务器。到目前为止效果很好。
但是请求缓存在 Excel 应用程序的某处。改完之后,刷新后worksheet里面还是显示没有变化的数据。但是数据在服务器端发生了变化。它不会向代理发送新请求,因此它会缓存在应用程序中。如果我使用 Chrome 和 Firefox 调用该应用程序,它工作正常。这里没有缓存。
是否可以避免Office App 中的缓存?或者我可以手动触发缓存的 invalidation/clear 吗?
编辑:
未更改数据是什么意思:我更改了 excel table 中的某些内容并将此数据上传到服务器。如果我现在刷新 excel sheet 中的数据,它会显示更改前的数据,因为它在某个地方缓存了第一个请求的数据并使用了它们。它不会再次调用服务器来获取具有更改值的数据。希望这个解释能有所帮助。
可以在此处添加一些代码示例,但我认为它们不会有很大帮助。
通过ajax调用获取数据的方法。当我刷新 excel 应用程序中的数据时,此方法仍会被调用并运行抛出回调,但请求不会到达代理服务器。
_downloadPeriods: function _downloadPeriods(sParameters) {
var oController = this;
...
var url = '/Proxy/RequestHandler.ashx/MaintainPeriodsExcelSet' + sParameters;
// ajax request to load the data from the sap backend server via the proxy
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
success: function success(oData) {
// create a material collection from the data
oController.resetMaterialCollection();
var oMaterialCollection = oController.getMaterialCollection();
oMaterialCollection.updateData(oData.d.results);
// insert data into the excel worksheet
try {
oController._updateExcelTable(oMaterialCollection);
} catch (e) {
// error handling
}
fnCallback();
},
error: function error(oErr) {
// error handling
}
});
},
我已经在代理中设置了缓存 headers,但它仍然缓存在 excel 应用程序的某处。
...
context.Response.Headers["cache-control"] = "private, max-age=0, no-cache";
...
在 ajax 中禁用缓存就成功了。
$.ajax({
type: 'GET',
url: url,
cache: false,
dataType: 'json',
success: function success(oData) {
...
},
error: function error(oErr) {
// error handling
}
});