如何设置Ajax调用的最短持续时间?

时间:2012-10-18 20:15:01

标签: jquery ajax timeout

我有一个网站进行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>

2 个答案:

答案 0 :(得分:6)

您可以计算起点和终点,然后在低于某个阈值时添加另一个延迟(使用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);
 }

答案 1 :(得分:1)

您可以在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变量以决定何时显示数据。