AJAX如何解决老版本IE浏览器导致的get请求造成的缓存问题导致内容无法实时刷新------AJAX

131 篇文章 0 订阅
45 篇文章 0 订阅
AJAX在浏览器当中发送异步请求,请求之间是独立的,谁也不用等谁
类似于多线程并发,不会出现页面清空然后展示新的页面的效果
实现局部刷新(靠多种技术一起做到的,而不是一个技术叫ajax)
它是异步的(类似于多线程)
在AJAX的请求以及响应中完全依靠的是XMLHttpRequest对象
XMLHttpRequest对象的readyState属性记录了XMLHTTPREQUEST对象的状态
这个ReadyState属性的对应值有
0请求未初始化
1服务器连接已建立
2请求已收到
3正在处理请求
4请求已完成且响应已就绪
因此我们说当XMLHttpRequest对象的readyState属性变成4的时候
表示这个AJAX请求和响应已经全部完成
对于低版本的IE浏览器来说,ajax的get请求可能会走缓存,但是现代浏览器都没有这个问题了
什么是ajax的get请求缓存问题呢?
post请求不会被浏览器缓存,没有缓存问题
get请求直接从浏览器缓存获取资源,不需要从服务器重新加载资源,速度较快,用户体验好
缺点是无法实时获取最新浏览器资源
什么时候会走缓存,1get请求,2请求路径已经被浏览器缓存过了,路径没变化的情况会走缓存
如何解决低版本的ajax缓存问题
对于低版本的IE浏览器才有这样的缓存问题,可以采用URL时间戳来解决
我们需要给请求加一个时间戳
也可以使用随机数,或者随机数加上时间戳拼接到我们的请求内
AJAX在浏览器当中发送异步请求,请求之间是独立的,谁也不用等谁
类似于多线程并发,不会出现页面清空然后展示新的页面的效果
实现局部刷新(靠多种技术一起做到的,而不是一个技术叫ajax)
它是异步的(类似于多线程)
在AJAX的请求以及响应中完全依靠的是XMLHttpRequest对象
XMLHttpRequest对象的readyState属性记录了XMLHTTPREQUEST对象的状态
这个ReadyState属性的对应值有
0请求未初始化
1服务器连接已建立
2请求已收到
3正在处理请求
4请求已完成且响应已就绪
因此我们说当XMLHttpRequest对象的readyState属性变成4的时候
表示这个AJAX请求和响应已经全部完成
对于低版本的IE浏览器来说,ajax的get请求可能会走缓存,但是现代浏览器都没有这个问题了
什么是ajax的get请求缓存问题呢?
post请求不会被浏览器缓存,没有缓存问题
get请求直接从浏览器缓存获取资源,不需要从服务器重新加载资源,速度较快,用户体验好
缺点是无法实时获取最新浏览器资源
什么时候会走缓存,1get请求,2请求路径已经被浏览器缓存过了,路径没变化的情况会走缓存
如何解决低版本的ajax缓存问题
对于低版本的IE浏览器才有这样的缓存问题,可以采用URL时间戳来解决
我们需要给请求加一个时间戳
也可以使用随机数,或者随机数加上时间戳拼接到我们的请求内
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script type="text/javascript">
    window.onload = function ()
    {
      document.getElementById("btn").onclick = function ()
      {
        var ajax = new XMLHttpRequest();
        ajax.onreadystatechange = function ()
        {
          if(ajax.readyState === 4)
          {
            if(ajax.status === 200)
            {
              document.getElementById("mySpan").innerHTML = ajax.responseText;
            }
            else
            {
              alert(ajax.status);
            }
          }
        }
        //开启通道
        var username = document.getElementById("username").value;
        var userCode = document.getElementById("userCode").value;
        //设置时间戳
        var time = new Date();
        ajax.open("GET","/ajax/ajaxRequest2?username="+username+"&userCode=" + userCode + "&当前时间戳" + time.getTime(),true);
        //get请求提交数据是在请求行上提交,直接以URL?name=value&name=value&name=value格式提交
        ajax.send();
        //这个是HTTP协议规定的
      }
    }
  </script>
  用户名<input type="text" name="username" id="username">
  账号<input type="text" name="userCode" id="userCode">
  <br>
  <button id="btn">发送AJAX</button>
  <br>
  <span id="mySpan"></span>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script type="text/javascript">
    window.onload = function ()
    {
      document.getElementById("btn").onclick = function ()
      {
        var ajax = new XMLHttpRequest();
        ajax.onreadystatechange = function ()
        {
          if(ajax.readyState === 4)
          {
            if(ajax.status === 200)
            {
              document.getElementById("mySpan").innerHTML = ajax.responseText;
            }
            else
            {
              alert(ajax.status);
            }
          }
        }
        //开启通道
        var username = document.getElementById("username").value;
        var userCode = document.getElementById("userCode").value;
        //设置时间戳
        var time = new Date();
        ajax.open("GET","/ajax/ajaxRequest2?username="+username+"&userCode=" + userCode + "&当前时间戳" + time.getTime(),true);
        //get请求提交数据是在请求行上提交,直接以URL?name=value&name=value&name=value格式提交
        ajax.send();
        //这个是HTTP协议规定的
      }
    }
  </script>
  用户名<input type="text" name="username" id="username">
  账号<input type="text" name="userCode" id="userCode">
  <br>
  <button id="btn">发送AJAX</button>
  <br>
  <span id="mySpan"></span>
</body>
</html>
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值