本帖最后由 zc19860213 于 2010-09-13 17:37:08 编辑

解决方案 »

  1.   

    var d1=new Date();//这里也可以提取秒进行计算
    for(var i=0;i<10000000;i++)
    {}
    var d2=new Date();
    alert(d2-d1);
      

  2.   

    你这什么逻辑???根本就是一个悖论.
    等你取得结束的时间再和开始的时间相减,得到整个异步完成的时间的时候.这个过程不管时间长短,都已经结束了!还能达到你那种如果时间短就不显示LOADING的目的吗???
    在没结束之前,在刚开始的时候,你根本没法知道下载的过程长短和具体时间.
    作程序员的第一条就是头脑要清楚,否则学多少也都用不好.
    打击你不是目的,对我更意味着分数的损失.但愿你正确理解,知道自己现在最需要锻炼加强哪方面的素质.毫不夸张说,这对你整个人生都是作用巨大的提示.
      

  3.   

    但是,这个功能还是可以实现的,只不过,绝不是你那种说法.第一步,在AJAX返回的数据末端,可以加一个标识对象,用STYLE为隐藏的元素,关键是和之前的内容不发生冲突,保证唯一性就行.第二步,开始AJAX请求后,紧接着setTimeout一个函数,用你觉得合适的延迟时间,在这个函数里,去向盛放AJAX返回内容的容器对象取其innerHTML,搜索这个字串里是否含有那个隐藏元素,或者是直接用隐藏元素的ID来取,看能否取到.如果结果是有的话,证明异步传输已经完成(此时,异步传输完成的隐藏LOADING代码也应已执行,虽然在这个方法中,此时并没显示LOADING,但无所谓),就直接退出此函数,如果没有,就说明过了指定的暂时等待时间,传输仍没完成,可能是一个长时间的过程,就显示LOADING提示.
      

  4.   

    其实还是有思路的, lz 楼上几位说的太重了. 你可以将loading图片的弹出设定一个timeout, 这个timeout就是你能够接受的时间, 如果在这个timeout执行完前, 请求已经返回了, 那么就clearTimeout, 这样就能达到lz的效果了
      

  5.   

    代码LZ根据自己的需要改吧var timer = null;

    function sendRequest(){
    clearTimeout(timer);
    timer = setTimeout(function(){
    showLoading();
    }, 1000);

    $.ajax({
    url: xxx,
    type: xxx,
    success: function(){
    clearTimeout(timer);
    timer = null;
    hideLoading();
    },
    error: function(){

    }
    })
    }

    //这里的LoadingElement是你的Loading层
    function showLoading(){
    $(LoadingElement).css('display', 'block');
    }

    function hideLoading(){
    $(LoadingElement).css('display', 'none');
    }
      

  6.   

    7楼连我的思路都没理解明白,如8楼所说,那个代码根本不行.
    它的执行过程跟楼主以前那种方式没什么两样,都是最原始的方法,先显示LOADING提示,再隐藏.只不过你这个先显示只是推迟1秒.本质完全没分别.反而对于在1秒之内就返回的情况,会产生错误结果.更糟糕了.正确的方式,好好看看我说的,是在setTimeout里去检查那个代表已经返回内容的"隐藏的特殊标记".如果有,就直接退出完事,如果没有才显示LOADING.
      

  7.   

    废话啊,
    "但是有的请求和响应的时间非常的快就不需要显示loading的效果,我想根据异步完成的时间来判断、?
    不知有没有这种方法获取一次异步请求的时间?"
    LZ需要得到的效果是很快就不显示loading, 只不过他想完成这个效果的思路错误. 你tm一上来就劈头盖脸的日他, 每个人都会犯错, 不能说他犯错了你就要把别人日死吧. 你说我理解不了你的思路. 你能理解我的思路?
    "反而对于在1秒之内就返回的情况,会产生错误结果.更糟糕了."怎么糟糕了? 1秒内返回值你不会判断是否正确? 如果不正确你可以自行继续处理. 如果正确则皆大欢喜