2

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

您可以查看我正在尝试制作的网站,以便更好地了解我在做什么。尝试单击右侧的相框或桌子上的留声机。

    <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>
4

2 回答 2

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(根据文档,目标会在从服务器收到响应后立即更新)。我建议将load调用转换为gets. 即,这个:

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

应该变成这样:

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

然后我上面编写的callback函数应该填充load.

 function callback(html) {
     $("#screen").html(html);
 }
于 2012-10-18T20:20:25.227 回答
1

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

示例代码:

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 变量来决定何时显示数据。

于 2012-10-18T20:19:23.213 回答