我正在使用Angular6进行项目。在一个奇怪的问题上,我已经挠了三天。 问题是,对于通过适当参数传递的相同api调用,我在两种浏览器(chrome和Internet Explorer 11)上得到了不同的响应。镀铬响应非常好并且已更新。
算法: 我有两种方法
流程: 使用“ onSaveAddUserInstructionClick()”将用户保存到时间表后,将调用“ populateProjectTimesheetUsers()”以在屏幕上获取更新的用户数据。
问题: 在chrome上,“ populateProjectTimesheetUsers()”正在获取更新的数据,但是在IE上,它将带来旧数据,即IE的“最新用户”列表中没有最新的用户。
代码:
onSaveAddUserInstructionClick(){
this.addUserModel.WorkerId = this.addUserModel.Worker.Key;
this.adminTimeEntryService.addUserToInstruction(this.selectedProjectId, this.addUserModel.WorkerId).subscribe(
(response) => {
this.messageService.showMessage("success","User added to instruction successfully");
this.populateProjectTimesheetUsers(this.selectedProjectId);
this.addUserModalRef.hide();
},
(error) => {
this.handleError(error);
this.addUserModalRef.hide();
}
)
}
populateProjectTimesheetUsers(projectId = null) {
if (projectId != null) {
this.userGridRowData = [];
this.adminTimeEntryService.getTimesheetUsersByProjectId(projectId).subscribe(
(response) => {
this.serviceLineGridRowData = response.ServiceLines;
this.userGridRowData = response.Users;
console.log("this.userGridRowData1: " , this.userGridRowData);
console.log("response1: " , response );
for(let i=0; i< this.userGridRowData.length; i++){
this.userGridRowData[i].AddInstructionRate = "Add Instruction Rate";
this.userGridRowData[i].RemoveUserFromInstruction = "Remove User From Instruction";
}
console.log("this.this.userGridRowData2: " , this.userGridRowData);
console.log("response2: " , response );
setTimeout(()=>{
console.log("this.this.userGridRowData3: " , this.userGridRowData);
console.log("response3: " , response );
this.userGridApi.setRowData(this.userGridRowData);
this.serviceLineGridApi.setRowData(this.serviceLineGridRowData);
}, 0);
},
(error) => {
Logger.logError(`getTimesheetUsersByProjectId error: ${JSON.stringify(error.error)}`);
}
);
}
}
尝试:
我通过引用检查了将变量分配给一个 另一个。
我检查了函数调用的异步性。
刷新了缓存
等
但是问题仍然存在。如果有人指出这个问题,那就太好了,我们可以学习。 可能是我错过了最小的事情,但是我找不到那是什么。
答案 0 :(得分:1)
也许该问题与IE浏览器缓存有关。
尝试清除IE浏览器的历史记录,并参考this article和this thread添加http标头,然后禁用缓存:
select hid
from dw
group by hid
having count(case when iss_ind in ('F', 'I', 'U') then 1 end) > 0
and count(case when iss_ind in ('R', 'W') then 1 end) > 0
order by hid;
答案 1 :(得分:0)
我错过了Internet Explorer网络统计信息的一瞥。这是在强迫api调用从缓存中获取数据。
我强迫我的api调用从真实服务器中获取数据并绕过缓存。 我通过以下方式设置标题。
headers = headers.set('Cache-control','no-cache');
headers = headers.set('Pragma','no-cache');