使用.js脚本禁用php缓存
我有一个js从不同的php文件中获取sql查询,还有一个html显示js变量 到目前为止,它工作了一段时间,但会慢慢地使我的浏览器过载,因为js在获取数据时会缓存每个php页面,最终导致浏览器崩溃 关于这一点,我有几个问题:a)如何禁用“旧”2个php页面集的缓存。。。 B) 有没有更好的办法使用.js脚本禁用php缓存,php,javascript,Php,Javascript,我有一个js从不同的php文件中获取sql查询,还有一个html显示js变量 到目前为止,它工作了一段时间,但会慢慢地使我的浏览器过载,因为js在获取数据时会缓存每个php页面,最终导致浏览器崩溃 关于这一点,我有几个问题:a)如何禁用“旧”2个php页面集的缓存。。。 B) 有没有更好的办法 var seconds = 3; var divs = new Array("div1", "div2"); var urls = new Array("jaxcount.php", "jaxcount2
var seconds = 3;
var divs = new Array("div1", "div2");
var urls = new Array("jaxcount.php", "jaxcount2.php");
// Refresh DIV
function refreshdiv() {
for (var i = 0; i < 2; i++) {
var div = divs[i];
var url = urls[i];
dorefresh(div, url);
break;
}
}
function dorefresh(div, url){
// Stolen XMLHTTP Request Object
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
} catch (e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // Internet Exploder
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
return false;
}
}
}
// IE Optimizations
fetch_unix_timestamp = function () {
return parseInt(new Date().getTime().toString().substring(0, 10));
};
var timestamp = fetch_unix_timestamp();
var nocacheurl = url + "?t=" + timestamp;
// The Beef
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState === 4) {
document.getElementById(div).innerHTML = xmlHttp.responseText;
setTimeout('refreshdiv()', seconds * 1000);
}
};
xmlHttp.open("GET", nocacheurl, false);
xmlHttp.send(null);
}
// Trigger Refresh
var seconds;
window.onload = function startrefresh() {
setTimeout('refreshdiv()', seconds * 1000);
};
var秒=3;
var divs=新数组(“div1”、“div2”);
var url=new数组(“jaxcount.php”、“jaxcount2.php”);
//刷新分区
函数refreshdiv(){
对于(变量i=0;i<2;i++){
var div=divs[i];
var url=url[i];
dorefresh(部门,网址);
打破
}
}
函数dorefresh(div,url){
//被盗的XMLHTTP请求对象
var-xmlHttp;
试一试{
xmlHttp=newXMLHttpRequest();//Firefox、Opera 8.0+、Safari
}捕获(e){
试一试{
xmlHttp=newActiveXObject(“Msxml2.xmlHttp”);//互联网爆炸器
}捕获(e){
试一试{
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}捕获(e){
返回false;
}
}
}
//IE优化
fetch\u unix\u timestamp=函数(){
返回parseInt(newdate().getTime().toString().substring(0,10));
};
var timestamp=fetch_unix_timestamp();
var nocacheurl=url+“?t=“+时间戳;
//牛肉
xmlHttp.onreadystatechange=函数(){
if(xmlHttp.readyState==4){
document.getElementById(div.innerHTML=xmlHttp.responseText;
setTimeout('refreshdiv()',秒*1000);
}
};
open(“GET”,nocacheurl,false);
xmlHttp.send(空);
}
//触发刷新
var秒;
window.onload=函数startrefresh(){
setTimeout('refreshdiv()',秒*1000);
};
问题与浏览器中的页面缓存无关。它必须对Ajax调用产生瀑布效应
问题是您正在调用setTimeout('refreshdiv()',秒*1000)代码>Ajax调用回调的内部
每次调用refreshdiv时,都要进行两次setTimeout调用。每次打电话时,你打两个电话,加起来。最终,您将进行大量Ajax调用。从视觉上看,它是这样的:
First Call A
/ \
/ \
Second A A
/ \ / \
Third A A A A
4th AA AA AA AA
5th AAAAAAAAAAAAAAAA
你怎么能修好它?检查计时器是否处于活动状态,如果没有活动计时器,请设置它
改变
setTimeout('refreshdiv()', seconds * 1000);
像
if (!window.timer) {
window.timer = setTimeout(refreshdiv, seconds * 1000);
}
还有其他解决方案,但这一个很容易实现 问题与浏览器中的页面缓存无关。它必须对Ajax调用产生瀑布效应
问题是您正在调用setTimeout('refreshdiv()',秒*1000)代码>Ajax调用回调的内部
每次调用refreshdiv时,都要进行两次setTimeout调用。每次打电话时,你打两个电话,加起来。最终,您将进行大量Ajax调用。从视觉上看,它是这样的:
First Call A
/ \
/ \
Second A A
/ \ / \
Third A A A A
4th AA AA AA AA
5th AAAAAAAAAAAAAAAA
你怎么能修好它?检查计时器是否处于活动状态,如果没有活动计时器,请设置它
改变
setTimeout('refreshdiv()', seconds * 1000);
像
if (!window.timer) {
window.timer = setTimeout(refreshdiv, seconds * 1000);
}
还有其他解决方案,但这一个很容易实现 虽然您可以(并且正在)使用cache buster查询字符串,但最好修改服务器端代码以发出适当的缓存到期头,例如
<?php
header('Cache-control: max-age=60'); // cache for 60 seconds at most
header('Expires: Tue, 11 Jun 2013 12:00:00 GMT'); // expire at a specific date/time.
虽然您可以(并且正在)使用缓存buster查询字符串,但最好修改服务器端代码以发出适当的缓存到期头,例如
<?php
header('Cache-control: max-age=60'); // cache for 60 seconds at most
header('Expires: Tue, 11 Jun 2013 12:00:00 GMT'); // expire at a specific date/time.
对于这些类型的请求,我现在倾向于使用jQuery这样的框架。大大简化了跨浏览器方面的工作。只是将其作为MySQL进行解冻,因为这与MySQL无关:)@Simonatmso.net好吧,OP找到了一种加载测试MySQL实例的方法。;)我认为更可能对客户端浏览器进行负载测试:D@PeeHaa埽 这是我第一次回答afaik的JS问题,我说的是“像jQuery这样的框架”,因为还有很多其他可用的框架。我还是不想在有很多有效选择的情况下重新发明轮子。OP询问是否有更好的方法来做到这一点,IMO使用框架将是一种更简单的方法来做到这一点,并确保跨浏览器的兼容性。jQuery恰好是我目前最喜欢的一个。@Simonatmso.net jQuery不是生活的答案。不要告诉别人这是真的。我现在倾向于使用像jQuery这样的框架来处理这些类型的请求。大大简化了跨浏览器方面的工作。只是将其作为MySQL进行解冻,因为这与MySQL无关:)@Simonatmso.net好吧,OP找到了一种加载测试MySQL实例的方法。;)我认为更可能对客户端浏览器进行负载测试:D@PeeHaa埽 这是我第一次回答afaik的JS问题,我说的是“像jQuery这样的框架”,因为还有很多其他可用的框架。我还是不想在有很多有效选择的情况下重新发明轮子。OP询问是否有更好的方法来做到这一点,IMO使用框架将是一种更简单的方法来做到这一点,并确保跨浏览器的兼容性。jQuery恰好是我目前最喜欢的一个。@Simonatmso.net jQuery不是生活的答案。别再告诉别人了。谢谢你的反馈!是否应该更改代码中两次出现的setTimeout来反映这一点?onload一次无关紧要,它只是Ajax readystatechange中的一次。修复代码后,它似乎仍在滚雪球。。。不确定我遗漏了什么。您还应该使用xmlHttp.open(“GET”),n