zoukankan      html  css  js  c++  java
  • ajax重复提交到相同url时出现的问题

    $.ajax({
       url : url,
       success : function(ret) {
        if (!noProgress){cniia.closeProgress();}
        if (onSuccess) {
         onSuccess(ret);
        }
       },
       error : function(data) {
        if (!noProgress){cniia.closeProgress();}
        cniia.showAlert("服务器错误,请稍候访问!");
       }
      });

    同一个url多次请求,即使做了修改的操作但是打开页面时仍然无更新,

    加上个属性cache : false, 用于去缓存,

    $.ajax({
       url : url,
       cache : false, //ie8相同url,不重复发送请求到后台,导致角色授权后,页面无法更新
       success : function(ret) {
        if (!noProgress){cniia.closeProgress();}
        if (onSuccess) {
         onSuccess(ret);
        }
       },
       error : function(data) {
        if (!noProgress){cniia.closeProgress();}
        cniia.showAlert("服务器错误,请稍候访问!");
       }
      });

    问题解决!

     在Ajax开发中,会遇到浏览器缓存内容的问题,比如,某个元素注册了鼠标事件(onmouseover),事件触发后会通过xmlhttprequest到服务器获取内容,在不刷新页面的情况下,浏览器会缓存第一次请求的内容,服务端更新后浏览器仍然显示第一次的内容。

    通常,这种请求都是xmlhttprequest发起的GET请求。根据 HTTP 规范,GET 用于信息获取,而且应该是幂等的。也就是说,当使用相同的URL重复GET请求会返回预期的相同结果时,GET方法才是适用的。当对一个请求有副作用的时候(例如,提交数据注册新用户时),应该使用POST请求而不是GET。所以浏览器会对GET请求做缓存处理。

    解决办法:

    一. GET请求URL后加随机数,让服务器认为不是相同的请求。

    例 "http://www.example.com/index.php?class=aitcle&page=5&_t=" + new Date().getTime()

    二. 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0")

    三. 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");

    四. 服务端响应请求时加 header("Cache-Control: no-cache, must-revalidate"); (PHP)

    五. 使用POST代替GET,浏览器不会对POST做缓存

  • 相关阅读:
    Oracle学习(一)SQL基础
    结构型设计模式(二)桥接模式
    dubbo学习(十)spring boot整合dubbo
    dubbo学习(九)dubbo监控中心
    结构型设计模式(一)适配器模式
    取石子游戏
    卡特兰数
    做题中踩过的坑。。。
    51Nod1130斯特林近似
    51Nod1089最长回文子串 V2(Manacher算法)
  • 原文地址:https://www.cnblogs.com/moonfans/p/3341201.html
Copyright © 2011-2022 走看看