先给出代码:
detectfile.cgi:
- C/C++ code
void quit(char* sMessage, int nCode) { cgiHeaderContentType("application/xml; charset=gb2312"); printf("<?xml version=\"1.0\" encoding=\"gb2312\"?>"); printf("<webresponse>"); printf("<code>%d</code>", nCode); printf("<message>%s</message>", sMessage); printf("</webresponse>"); } int cgiMain() { int nSize = 0; char sTmp[256]; struct stat sFileStat; if(stat("/tmp/upload_12345", &sFileStat) < 0) { quit("file is not found in server!", 500); return 0; } nSize = sFileStat.st_size; snprintf(sTmp, sizeof(sTmp), "%d", nSize); quit(sTmp, 200); return 0; }
js函数:
- JScript code
var nRet = 0; function getFileSize() { nRet = 0; parent.$.ajax( { url: "/cgi-bin/abc/detectfile.cgi", type: 'GET', dataType: 'xml', async: false, timeout: 5000, error: function() { nRet = -1; }, success: function(sData) { if(parseInt(parent.$(sData).find("code").text()) != 200) nRet = -2; else nRet = parseInt(parent.$(sData).find("message").text()); } }); alert(nRet.toString()); }
问题描述:
在一个html页面(假设为test1.html)中加入:
<script>setInterval("getFileSize()", 1000);</script>
每秒钟请求一次文件的大小,另外有一个程序生成upload_12345文件,并且每次写200个字节的数据,然后休眠2秒
再写,这样就可以感觉到文件不断被写入的过程了,所以每次在调用getFileSize函数时应该可以看到动态增长的数
据。现在的问题是,在打开test1.html的时候,可以看到每秒弹出一个提示框,里面会显示取得的数据,但是发觉
以后每次弹出的数据都是和第一次一样的(比如512或234等)。假如我另开一个页面(假设为test2.html),直接
访问"/cgi-bin/abc/detectfile.cgi"的话,每次刷新可以看到数据的动态增长,而这时,test1.html弹出的数据也
会动态增长了。请各位看看,为什么我在test1.html中让程序每秒自动调用一次getFileSize()得到的数据都是一样
的,而在手动调用"/cgi-bin/abc/detectfile.cgi"页面刷新之后才会看到数据的变化呢?在线等...
------解决方案--------------------
jq在IE浏览器默认缓存的问题,加上cache:false
- JScript code
function getFileSize() { nRet = 0; parent.$.ajax( { cache:false,//================== url: "/cgi-bin/abc/detectfile.cgi", type: 'GET', dataType: 'xml', async: false, timeout: 5000, error: function() { nRet = -1; }, success: function(sData) { if(parseInt(parent.$(sData).find("code").text()) != 200) nRet = -2; else nRet = parseInt(parent.$(sData).find("message").text()); } }); alert(nRet.toString()); }