我之前写了一个NavigationService,用来做页面的Ajax导航,但是今天发现一个问题,在IE下面,发现Ajax的请求不会真正的被发送到服务器端,在IE里面,返回的永远是304。这个应该是IE的设计问题:查了一下,发现这个博文里面提到了问题的本质:http://blog.sina.com.cn/s/blog_4b7809800100y1c3.html。“因为ajax请求的时候如果使用get方式请求,同时路径参数相同的时候,ajax会先从本地缓存中取,如果取到了它是不会去请求后台的”,知道了问题就好办了,照着文章中写的那样,给每个AJAX的请求都加一个请求参数,以保证URL永远不同。这个是修改之后的代码:

# require: jQuery

# Encapsulate the logic to dynamic load content by Url flag segment

class UrlFlagNaviListener

#public:

constructor: (@m_container, @m_uiLoading, @m_uiError)->

this.__addListener();

naviContent: (contentAjaxUrl)->

contentAjaxUrl = (contentAjaxUrl || window.location.hash).slice(1);

this._naviContentImpl(contentAjaxUrl);

#protected:

_naviContentImpl: (contentAjaxUrl) -> # to be overriden

#private:

__addListener: ()->

$(window).on("hashchange", ()=>

this.naviContent();

);

class ContentNaviListener extends UrlFlagNaviListener

#protected:

_naviContentImpl: (contentAjaxUrl) ->

if (contentAjaxUrl isnt '')

# cancel the previous page's deferred

if (@m_prevRequest?.deferred.state() is 'pending')

console.log("Previous request is cancelled.")

@m_prevRequest.deferred.abort();

@m_prevRequest.stopAnimation();

@m_prevRequest = null;

@m_container.hide();

@m_uiError.hide();

request = {};

# Start animation and return the function to stop it

request.stopAnimation = (()=>

animation = ()=>@m_uiLoading.fadeIn(800).fadeOut(1000);

animation();

timer = setInterval(animation, 2000);

stopAnimation = ()=>

clearInterval(timer);

@m_uiLoading.stop().hide();

return stopAnimation

)();

# Force IE9 refresh the ajax page

leadingChar = if (contentAjaxUrl.indexOf("?") is -1) then "?" else "&"

contentAjaxUrl += "#{leadingChar}timeStamp=#{new Date().getTime()}"

request.deferred = $

.get(contentAjaxUrl)

.done( (data, textStatus, jqXHR)=>

request.stopAnimation();

@m_container.show().html(data) )

.fail( ()=>

request.stopAnimation();

@m_uiError.show() )

@m_prevRequest = request;

############

# Exports

############

window.ContentNaviListener = ContentNaviListener;

304 ajax,Ajax请求永远是304的解决方案相关推荐

  1. ajax发送异步请求四个步骤,深入理解ajax异步请求的五个步骤(详细代码)

    在前端工作中,经常会用到ajax,其实很多人只知道ajax是异步请求,不知道应该如何用它,它的基本步骤有哪些,ajax请求过程是怎样的?接下来这篇文章就给大家介绍Ajax的请求步骤,以及ajax请求步 ...

  2. 原生JS写Ajax的请求函数

    本文主要介绍了如何通过原生JavaScript封装ajax请求,文中给出了具体的实现代码和详细的解释,希望对你有所帮助. 一.JS原生Ajax ajax:一种请求数据的方式,不需要刷新整个页面: aj ...

  3. addeventlistener监听ajax请求_基于h5的history改善ajax列表请求体验

    信息比较丰富的网站通常会以分页显示,在点"下一页"时,很多网站都采用了动态请求的方式,避免页面刷新.虽然大家都是ajax,但是从一些小的细节还是 可以区分优劣.一个小的细节是能否支 ...

  4. 什么是Ajax?Ajax如何发送请求(详)

    本篇来讲关于Ajax的内容,当然还有小伙伴可能不知道该怎么读 "Ajax",它读 "阿贾克斯" ,当然了读法可能因人而异,下面来进入正题,先来了解一下什么是Aj ...

  5. js ajax 递归,javascript ajax循环请求/ 长轮询终极解决办法——递归

    ajax循环请求,不能使用for循环,原因如下: 1. 因为ajax是异步执行,在还没有拿到服务器响应内容,就进入下一个for循环中 解决办法:递归currentIndex = 0; function ...

  6. ajax提交相对路径报错,ajax提交请求为啥url要用这个函数encodeURI

    参考如下: 如果你是通过form提交的,那就不需要用这个了.但是如果是你使用url的方式 例如:ajax提交到后台的,就需要对url进行encodeURI编码, 否则,会导致后台出现各种乱码,不加en ...

  7. php 返回字符串给aja,解决ajax异步请求返回的是字符串问题

    1.返回结果差异 js获取后打印res.code无结果.因为返回数据格式不正确. php文件添加header头: header('Content-Type:application/json;'); 或 ...

  8. html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  9. ajax jsonp请求报错not a function的解决方案

    ajax jsonp请求报错not a function的解决方案 参考文章: (1)ajax jsonp请求报错not a function的解决方案 (2)https://www.cnblogs. ...

最新文章

  1. LeaFlet学习之GridLayer扩展
  2. 一次绕过360+诺顿的提权过程
  3. 6.Xilinx RapidIO核仿真与包时序分析
  4. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识
  5. android.mk官网介绍,转载:Android.mk语法介绍
  6. python读取python源代码文件_python 学习源码练习(2)——简单文件读取
  7. 图像处理——DCT变换的学习笔记
  8. linux 命令之df持续更新中~
  9. Atitit.mssql 数据库表记录数and 表体积大小统计
  10. BZOJ3835 [Poi2014]Supercomputer 【斜率优化】
  11. 04轨迹规划基础----正逆运动学的C++代码编写
  12. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——第1篇 获取伴奏篇 第1章 MIDI音乐伴奏的获取与制作 1.1 电脑MIDI音乐与设备的介绍...
  13. mb860 刷机教程
  14. [深度学习工具]·FoolNLTK 中文处理工具包使用教程
  15. 轻松获得oblog2.52的WebShell
  16. 怎么删除或者彻底卸载输入法
  17. 谷歌浏览器崩溃之错误代码:RESULT_CODE_MISSING_DATA
  18. 2021年高考成绩查询无为二中,2021年无为县高考状元名单资料,今年无为县高考状元多少分...
  19. java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...
  20. 关于阿里云服务器ECS与域名的绑定详细过程介绍

热门文章

  1. 用Matlab处理TDMS数据(降噪+频谱分析)
  2. pythonxpath语法_xpath语法
  3. iOS-NSDate 相差 8 小时
  4. Oracle 数据库的备份与恢复
  5. 校园社交类app“校园微生活”
  6. dayjs-入门及常用方法
  7. 武磊进球,我连夜分析了武球王2019赛季数据
  8. 未来:spring响应式编程 Hands-On Reactive Programming in Spring 5(二)------Basic Concepts
  9. 在 Keras 模型中使用预训练的词嵌入
  10. 献给年轻人少走弯路的10大忠告