使用.js脚本禁用php缓存

使用.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

我有一个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.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