我有一个非常简单的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,并且调用没有到达它。 Developer Tools中的网络面板不显示呼叫。 textStatus
为'错误',errorThrown
为空,jqXHR.status
为0.发生这种情况时,如果我只是运行http://localhost/match
,或者甚至打开同一页面在FireFox中 - 我得到了正确的结果。
所以这不是服务器或路由问题 - 它纯粹是在客户端。
这种行为昨天开始了,现在我也在生产服务器上观察它。它是零星的 - 如果我关闭Chrome,清理缓存等,它会再次工作 - 一段时间。缓存中是否存在阻止呼叫的内容?
有任何想法如何解决这个问题?
答案 0 :(得分:5)
听起来好像浏览器正在使用缓存的响应。尝试添加选项:
cache: false
到$.ajax()
来电。
答案 1 :(得分:3)
我认为你正在做这样的事情。
setInterval(ajaxFunction, 1000);
如果此ajax请求需要超过1秒才能完成,会发生什么?您将有两个待处理的ajax请求。需要的时间越长,请求就会越多,最终导致浏览器出现问题。
解决方案是实现类似于以下内容的东西。
function ajaxRequest() {
$.ajax({
complete: function() {
setTimeout(ajaxReqest, 1000);
});
});
}