Ajax的url请求中为何要加随机数

本文介绍了在使用Ajax或DWR进行系统开发时遇到的IE浏览器缓存问题,并提供了两种解决方案:一是通过在请求URL后添加时间戳来实现;二是通过在URL后添加随机数的方式避免缓存。

大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的时候总是使用IE缓存,为了解决这个问题一般可以用一下方法:

1:在ajax或者dwr提交的url后面加时间戳。
例如
http_request.onreadystatechange = funcName;
http_request.open(“GET”, url, true);

比如url是test .jsp
那么我们在它后面加上?time=new Date();
即url=test.jsp?time=new Date();

2 :在url后面加一个随机数。
url=test.jsp?number=Math.random();
URL随机数的作用就是避免游览器缓冲JS

转载自:http://blog.youkuaiyun.com/llorjj999/article/details/7732773

### 防止HTML缓存的方法 为了防止HTML页面中的资源被浏览器缓存,可以通过为请求参数附随机数的方式实现。这种方法能够确保每次载时都传递不同的URL,从而避免浏览器使用本地缓存的内容。 以下是具体的解决方案: #### 方法一:动态修改JavaScript中的请求链接 可以在前端脚本中动态生成带有随机数请求地址。例如,在`<script>`标签或AJAX请求随机数作为查询字符串的一部分[^1]。 ```javascript function addRandomParam(url) { const randomNum = Math.random().toString(36).substring(7); return url.includes('?') ? `${url}&rand=${randomNum}` : `${url}?rand=${randomNum}`; } // 示例应用到图片或其他静态资源 const imgElement = document.createElement('img'); imgElement.src = addRandomParam('/path/to/image.jpg'); // 动态添随机数 document.body.appendChild(imgElement); // 应用于 AJAX 请求 fetch(addRandomParam('/api/data')) .then(response => response.json()) .then(data => console.log(data)); ``` #### 方法二:服务器端配置 虽然题目主要关注的是客户端方法,但在某些情况下也可以考虑通过服务器端控制响应头来禁用缓存。这种方式不需要手动添随机数,但需要调整Web服务器或API服务的行为[^4]。 例如,在Node.js环境中设置HTTP头部如下: ```javascript app.use((req, res, next) => { res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); res.setHeader('Pragma', 'no-cache'); res.setHeader('Expires', '0'); next(); }); ``` 然而,此方式并不完全满足“为所有请求参数添随机数”的需求,因此仅作补充说明。 --- ### 结合HTML的具体实践 如果希望直接在HTML文件内部处理,则可以利用模板引擎或者简单的替换逻辑完成操作。下面展示了一个基于纯HTML与少量嵌入式JS的例子: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Anti-Cache Example</title> <!-- 添随机数至CSS --> <link rel="stylesheet" href="/styles.css?cacheBuster={{ cache_buster }}"> </head> <body> <!-- 图片路径自动附带随机值 --> <img id="dynamicImage" src="" alt="Dynamic Image"> <script> function appendRandomToUrl(url) { let rand = new Date().getTime(); // 时间戳代替Math.random() return `${url}${url.indexOf('?') === -1 ? '?' : '&'}_t=${rand}`; } // 修改图像源属性 document.getElementById('dynamicImage').src = appendRandomToUrl('/images/sample.png'); // 如果有多个外部脚本/样式表需防缓存,可批量调用appendRandomToUrl函数 </script> </body> </html> ``` 以上代码片段展示了如何向任意类型的资源(如CSS、图片、字体等)追时间戳形式的时间变量以规避潜在的缓存问题[^5]。 --- ### 总结 无论是采用编程手段还是依赖工具链优化,默认推荐优先尝试无侵入式的解决策略——即更改HTTP Headers而非硬编码额外参数进入每一个可能涉及持久化的环节之中。不过针对特定场景下确实存在必要性的场合来说,“附唯一标识符”不失为一种简单有效的折衷办法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值