首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

使用ajax调用cgi取得文件大小的有关问题

2012-05-03 
使用ajax调用cgi取得文件大小的问题先给出代码:detectfile.cgi:C/C++ codevoid quit(char* sMessage, int

使用ajax调用cgi取得文件大小的问题
先给出代码:
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());} 

热点排行