【问题标题】:How do I set the minimum duration of an Ajax call?如何设置 Ajax 调用的最短持续时间?
【发布时间】:2012-10-09 09:41:27
【问题描述】:

我有一个网站,它进行 ajax 调用,然后加载 gif 以在电视上显示静态。但是现在,ajax 调用并没有花费足够的时间来真正弹出效果。所以我想知道是否有办法设置 ajax 调用的最短时间?

你可以看到the website 我正在努力让我更好地了解我在做什么。尝试点击右边的相框或桌子上的留声机。

    <script type="text/javascript">
    var minDelay = 1000;
    var start = new Date();
    $.get("form.html", function(result) {
        callback($(result).find("#contact"));
        var end = new Date();
        var timeInMilliseconds = end - start;
        if (timeInMilliseconds  < minDelay) {
            setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds );
        }
        else callback(result);
    });
    $.get("music.html", function(result) {
        callback($(result).find("#music"));
        var end = new Date();
        var timeInMilliseconds = end - start;
        if (timeInMilliseconds  < minDelay) {
            setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds );
        }
        else callback(result);
    });


    function callback(result) {
        $("#screen").html(result);
    }
</script>

【问题讨论】:

    标签: jquery ajax timeout


    【解决方案1】:

    您可以对起点和终点进行计时,然后在低于某个阈值时再添加一个延迟(使用setTimeout)。像这样的:

    var minDelay = 1000;
    var start = new Date();
    $.get(url, function(result) {
        var end = new Date();
        var timeInMilliseconds = end - start;
        if (timeInMilliseconds  < minDelay) {
            setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds });
        }
        else callback(result);
    });
    
    function callback(result) {
        // Ajax response handling here ...
    }
    

    编辑我不确定您是否可以使用 JQuery 的load 来实现这一点(根据docs,目标会在收到来自服务器的响应后立即更新)。我建议将load 调用转换为gets。即,这个:

    $("#screen").load("form.html #contact");
    

    应该变成这样:

    $.get("form.html", function(result) {
        callback($(result).find("#contact"));
    });
    

    然后我在上面编写的callback 函数应该填充load 的目标。

     function callback(html) {
         $("#screen").html(html);
     }
    

    【讨论】:

    • 您能详细说明我在帖子中添加的代码吗?我正在使用 jquery .load 函数。这是一个问题吗?谢谢 dbaseman
    • @katiebekell hm,是的,根据文档,我看不出您如何使用load 来实现这一点...您可以将它们切换为get 调用吗?
    • 我在哪里设置应该调用什么 gif,我还注意到你将函数(结果)更改为响应(结果)应该是响应吗?感谢您的帮助,我可以看到光了
    • 我按照您建议的方式进行了更改,但由于某种原因它不再起作用 - 我将在我的问题中发布我的新代码
    • @katiebekell 抱歉,应该是 function(result),而不是响应(结果)。那是一个错字。
    【解决方案2】:

    您可以在ajax 回调方法中使用setTimeout() 方法来模拟延迟吗? 很酷的网站顺便说一句!

    示例代码:

    var minDelay = 500;//half a second
    setTimeout(DelayTimePassed, minDelay);
    //make Ajax Call
    
    function DelayTimePassed()
    {
    if(dataAvailable)
    //show Data
    else
    //show data as soon as available
    }
    
    function AjaxCallback()
    {
    if(showDataAsSoonAsAvailable)
    //Show Data Now
    else
    dataAvailable=true;//show data after time delay passes
    }
    

    希望这对您有意义 - 两种方法检查几个全局 bool 变量来决定何时显示数据。

    【讨论】:

    • 你能告诉我 setTimeout() 会去哪里吗?我试过了,但没有得到我希望的结果谢谢我很高兴你喜欢这个网站
    • 对不起,我还是有点迷茫——我已将我的 ajax 代码添加到我的帖子中。我只是在使用 load() 函数
    • 我对 jQuery 有点陌生,但我发现了另一个涉及到这个的问题:stackoverflow.com/questions/5025839/… 显然你的 ajax 调用必须有点不同,因为 .load 方法会自动关闭静态 -收到回复后在电视上播放。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多