Как игнорировать / очистить кэш приложения панели задач Excel?
Я пишу приложение панели задач для Excel с использованием API Office JavaScript. В этом приложении я запрашиваю данные с другого сервера и показываю эти данные на листе Excel. Изменения в рабочей таблице также могут быть загружены на сервер. Запросы являются простыми вызовами ajax прокси. Прокси перенаправит этот запрос на сервер. Это работает отлично до сих пор.
Но запрос кешируется где-то в приложении Excel. После изменения в нем все еще отображаются неизмененные данные на листе после обновления. Но данные изменяются на стороне сервера. Он не отправляет новый запрос на прокси, поэтому он кэшируется в приложении. Это работает нормально, если я вызываю приложение с Chrome и Firefox. Здесь ничего не кэшируется.
Есть ли возможность избежать кэширования в приложении Office? Или я могу вызвать аннулирование / очистку кэша вручную?
РЕДАКТИРОВАТЬ:
Что я имею в виду с неизменными данными: я что-то изменяю в таблице Excel и загружаю эти данные на сервер. Если я сейчас обновлю данные в листе Excel, он покажет мне данные до изменений, потому что он где-то кэшировал данные из первого запроса и использует их. Он не делает еще один вызов на сервер, чтобы получить данные с измененными значениями. Надеюсь, это объяснение поможет.
Могу добавить здесь несколько примеров кода, но я не думаю, что они окажут большую помощь.
Метод для получения данных с помощью вызова 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
}
});
},
Я уже установил заголовки кэширования в прокси, но он все еще кэшируется где-то в приложении Excel.
...
context.Response.Headers["cache-control"] = "private, max-age=0, no-cache";
...
1 ответ
Отключение кеша в ajax добилось цели.
$.ajax({
type: 'GET',
url: url,
cache: false,
dataType: 'json',
success: function success(oData) {
...
},
error: function error(oErr) {
// error handling
}
});