如何使用JQuery停止超时ajax调用



我有一个ajax应用程序,其代码如下:

$.ajax({
type: "GET",
url: "data.txt",
beforeSend:function(){
},
success:function(response){
 just update responsed data;
}
});

这个调用每秒进行一次,它只是从'data.txt'更新最新的数据,该数据正在使用cron job在服务器上更新。现在,由于它的唯一功能是每秒更新最新数据所以我将对最新ajax调用更感兴趣;那么我如何终止旧的ajax调用,已经超过4秒,但尚未完成,以便我可以减少服务器流量。是否建议使用"data.html"或"data.php"代替"data.txt"会提高应用程序的性能?对于ajax驱动的应用程序,哪个web服务器可以比Apache表现得更好?我急需这些帮助;

您可以跟踪上次成功更新的时间。

function NowMS() {return parseInt(new Date().getTime())}
dataLastUpdateT = -Infinity;
$.ajax({
    type: "GET",
    url: "data.txt",
    success: function(response){
        if (NowMS() > dataLastUpdateT) {
            use(response);
            dataLastUpdateT = NowMS();
        }
    }
}

我不知道您目前是如何设置的,但也许在最近一次AJAX调用完成(或返回错误)之后运行下一个AJAX调用会更好。所以它应该是这样的:

(function updateData() {
    $.ajax({
        type: 'GET',
        url: 'data.txt',
        beforeSend: function() {
            // Do stuff
        },
        success: function(response) {
            // Handle response
            updateData();
        }
    });
})();

我不知道更改文件类型是否会对性能产生影响。

Edit:如果您确实需要终止请求,您可以使用这里解释的技术。

你可以试试:

function getData(){
    $.ajax({
        type: "GET",
        url: "data.txt",
        timeout:4000,
        beforeSend:function(){
        },
        success:function(response){
        },
        error:function(){
        },
        complete:function() {
            setTimeout(function(){getData();},1000);
        }
    });
}
getData();

这样,ajax请求在4秒后超时,并且每秒钟重试一次(无论成功与否)

也看看nginx为例,它是快速和使用更少的内存比apache来处理客户端连接

最新更新