使用ajax请求后台一个处理程序,这个程序随时间推进会生成一个文本文件。我提前终止了页面,也删除了文本文件,可过一会文本文件又产生了,说明程序还在运行,即使关闭浏览器也无法终止。没有设置ignore_user_abort(),只设置了set_time_limit(0),怎么回事?

解决方案 »

  1.   

    当你终止了(关闭了浏览器)页面时,你能确认 XMLHttpRequest 进程也终止了吗?
    至少我没有看到这方面的描述
      

  2.   

    理论上,关闭浏览器的情况下,SOCKET链接也应该关闭了,服务器应该终止当前任务才对。同问。
      

  3.   

    function get_feed(m_time){
    if(!arguments[0]) m_time = "Not";
        $.ajax({
    url:'modules/douban/feedback.php',
    data:{'action':'getfeed','m_time':m_time},
    type:"POST",
    dataType:'json',
    //contentType: 'application/json; charset=utf-8',
    cache:'false',
    //async: true,
    success:function(data){
    m_time=data.m_time;//修改时间
    if(typeof(data.process)=='undefined'){
    var process_time='empty';
    } else { 
    var last_time=m_time;
    $.each(data.process,function(i,item){
    var process_time=item.time;
    var each_process=item.str;
    if(each_process.length>0){
    $("#processing").append(process_time+':'+each_process);
    }
        });
        each_process=null;
    }

    if(process_time=='end_time'){
    $.post('modules/douban/feedback.php',{action:'del_file'});
    window.clearInterval(repeat);
        } else {
         repeat=window.setInterval(function(){get_feed(m_time);},30000);
    }
    },
    complete:function(xhr,ts){//无论成功与否均会执行
    //alert(ts);
    },
    error:function(xhr){alert('发生了错误!');}
        });
      },我用这个js用来请求后台处理进度(文本文件中),进度每次更新后会覆盖原来的内容,使用修改时间判断进度是否已更新。第一次(文本文件为空)执行没问题,当进度更新时,就出错,这个请求次数会以几何倍数增加,过不了多久浏览器就崩溃了。不知道哪里写错了?
      

  4.   

    XMLHttpRequest.abort()
    取消当前响应,关闭连接并且结束任何未决的网络活动。
    这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。