问题描述:
IE浏览器会对AJAX请求结果作为一个缓存,当下一次发送请求时,它走的是本地缓存,并不是服务器返回的最新数据对于时效性比较强的场景,AJAX缓存会影响这个结果不够正常的去显示。
请求端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>IE缓存问题</title>
<style>
#result {
width: 200px;
height: 100px;
border: solid 1px pink;
}
</style>
</head>
<body>
<button>点击发送请求</button>
<div id="result"></div>
<script>
const btn = document.getElementsByTagName('button')[0];
const result = document.querySelector('#result');
btn.addEventListener('click', function() {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1:8000/ie');
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
result.innerHTML = xhr.response;
}
}
}
});
</script>
</body>
</html>
服务器端:
const { request, response } = require('express');
// 1.引入express
const express = require('express');
app.get('/ie', (request, response) => {
//设置响应头,设置跨域
response.setHeader('Access-Control-Allow-Origin', '*')
//设置响应体
response.send('HELLO IE-1');
});
第一次执行
改变服务器返回消息后:
response.send('HELLO IE-2');
没有及时的更改内容。
解决方案
xhr.open('GET', 'http://127.0.0.1:8000/ie?t=' + Date.now());
初始化时,在url中加上时间,来区别两次请求的不同。