0

我有一个非常简单的 Ajax 调用,以 1 秒的间隔运行,它使用匹配状态更新我的页面:

var getMatches = function() {
        $.ajax({
            url: '/match',
            type: 'GET',
            success: function(data) {
                avm.matches(data);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log('Error occured: ' + errorThrown);
            }
        });
    };

这从项目一开始就运作良好,但最近开始出现行为不端 - 仅在 Chrome 上。

调用不会触发 - 我在服务器端有 Log::debug,但调用没有到达它。开发人员工具中的网络面板不显示呼叫。是“textStatus错误”,errorThrown是空的,jqXHR.status是 0。发生这种情况时,如果我只是运行http://localhost/match,甚至在 FireFox 中打开同一页面 - 我会得到正确的结果。所以这不是服务器或路由问题 - 它纯粹是在客户端。

这种行为是昨天开始的,现在我也在生产服务器上观察它。它是零星的——如果我关闭 Chrome、清理缓存等,它会再次工作——一段时间。缓存中是否存在阻止调用的内容?

任何想法如何解决这个问题?

4

2 回答 2

5

听起来浏览器正在使用缓存的响应。尝试添加选项:

cache: false

$.ajax()来电。

于 2013-07-23T18:04:11.183 回答
3

我假设你正在做这样的事情。

setInterval(ajaxFunction, 1000);

如果这个 ajax 请求需要超过 1 秒才能完成会发生什么?您将有两个待处理的 ajax 请求。花费的时间越长,请求就会越多,最终导致浏览器变得笨拙。

解决方案是实现类似于以下内容。

function ajaxRequest() {
    $.ajax({
         complete: function() {
               setTimeout(ajaxReqest, 1000);
         });
    });
}
于 2013-07-23T18:05:11.200 回答