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做缓存

  • 相关阅读:
    spring学习总结009 --- 重复id或name的bean定义允许覆盖allowBeanDefinitionOverriding
    spring学习总结008 --- IOC流程图
    spring学习总结007 --- IOC容器级生命周期接口
    spring学习总结006 --- Bean级生命周期接口
    spring学习总结005 --- IOC容器启动源码(事件机制)
    字体图标
    pycharm永久激活
    Linux常用命令
    Android Studio 更新后导入旧项目Bug解决
    Ubuntu更新源
  • 原文地址:https://www.cnblogs.com/moonfans/p/3341201.html
Copyright © 2011-2022 走看看