jQuery Ajax - 延迟响应行为奇怪

时间:2014-11-01 11:40:00

标签: jquery ajax

如果响应延迟,我无法理解从jQuery AJAX请求返回的数据。我每秒都在运行请求,如果响应延迟了,比如说3秒,就会调用AJAX的成功方法

    Chrome中的
  • :每3或4秒一次响应四次
  • Firefox Linux中的
  • :每3或4秒响应一次

请参阅fiddle

HTML:

<div id="result"></div>

JS:

$(document).ready(function(){
    updateData();

    function updateData(){
        doRequest();
        setTimeout(updateData, 1000);
    }

    function doRequest(){
        $.ajax({
            url: '/echo/js/',
            type : "GET",
            data: {
                js: "",
                delay: 3
            },
            success: function(retVal){
                $('#result').append(new Date() + '<br>');
            },
            error: function(error){
                alert("Error in network (" + error.status + ")");
            }
        });
    }
})

我是否可以强制jQuery为每个响应运行成功方法,而不是在任何组中运行,并强制它每秒运行一次请求?谢谢!

2 个答案:

答案 0 :(得分:1)

这都是关于缓存的。 http://jsfiddle.net/jakecigar/9bcxh3hd/4/杀死了缓存。

通常从缓存中获取具有相同参数的get请求。

$(document).ready(function(){
updateData();

function updateData(){
    doRequest();
    setTimeout(updateData, 1000);
}

function doRequest(){
    $.ajax({
        url: '/echo/js/',
        type : "GET",
        **cache:false,**
        data: {
            js: "",
            delay: 3
        },
        success: function(retVal){
            $('#result').append(new Date() + '<br>');
        },
        error: function(error){
            alert("Error in network (" + error.status + ")");
        }
    });
}
})

答案 1 :(得分:0)

根据您的意见:

<head>下:

<script>
    var second_1=0;
    var second_2=0;
    var second_3;
</script>

从我的角度来看,您应该使用全局变量来存储second_1second_2,然后使用响应数据(second_3)。

接下来,使用您的响应数据(第3秒)并获得这些值的平均值。摆脱延迟,并做这样的事情:

success: function (data) {
    second_3=data; //whatever part of data it is you are using
    var my_average = (second_1 + second_2 + second_3)/3;
    second_1 = second_2; // 2nd second becomes first
    second_2 = second_3; // and 3rd second becomes second
}

我希望这会有所帮助。