js ajax datetime,关于javascript:setInterval计时器上的Ajax调用不起作用

我有一个非常简单的小过程。我有一个间隔计时器,当它到期时,它将对服务器进行ajax调用。使用返回的json,它解析出并更新DOM。 setInterval设置为一秒。然后,服务器对数据库执行非常简单的SELECT。如果执行查询,它将执行一个毫秒的查询。

在我们的测试服务器上,它工作正常。但是,当将其部署到我们的客户时,大多数情况下实际上并没有访问数据库。我们可以在查询分析器中看到它。查询应该是连续不断的,但是充其量是零散的,每次命中之间通常间隔40秒或更长时间。

这是代码:

setTimeout(function run() {

// When the timer elapses, get the data from the server

GetData(0);

setTimeout(run, _refreshRate);

}, 1000);

function GetData(isFirstLoad) {

//console.log("Attempting to obtain the data...");

jQuery.ajax({

url:"something.ashx",

type:"GET",

contentType: 'application/json; charset=utf-8',

success: function(resultData) {

//console.log("Got the data.");

ParseJson(resultData);

// show the last refresh date and time

$('#refreshTime').html(GetDateTime());

},

error : function(xhr, textStatus, errorThrown) {

if (textStatus == 'timeout') {

//console.log("Timeout occured while getting data from the server.  Trying again.");

// If a timeout happens, DON'T STOP. Just keep going forever.

$.ajax(this);

return;

}

},

timeout: 0,

});

}

ParseJson(resultData);中的所有内容都可以正常工作。有了这条线...

$('#refreshTime').html(GetDateTime());

...时间每秒钟刷新一次,就像发条一样,即使数据库永远不会受到影响。

而且我可以在error内的调试工具中放置一个断点,而这个断点永远不会被击中。

如果我们单击刷新,它会起作用或等待几秒钟(我们可以看到查询命中了数据库),但随后又变慢了。

令人沮丧的是,它可以在我们的测试服务器上完美运行。但是显然有一些我忽略的事情。

编辑:

好的,这真的很奇怪。当我打开调试器时,它可以工作。关闭调试器后,它将立即停止工作。我什至不必让网络标签运行并捕获事件。只需打开调试器窗口即可使其工作。

这就是IE,客户端正在使用它,因此这是我们唯一的选择。

什么是$.ajax(this);?错误回调被调用了吗?顺便说一句,如果整个事情在另一个部署中都还不错,那么您很难指望这是一个编程问题...

我发现在这里的另一个线程上,试图弄清楚如何进行ajax调用时,只要有超时就可以简单地再次执行自身操作。

话虽如此,我可以在我的测试服务器和客户端生产服务器上都设置一个断点,而这个断点永远不会受到攻击。一旦设置了timeout:0,它就再也不会超时...我认为这很好。

从来没有听说过,我对此表示高度怀疑。 this的设置取决于JS上下文,因此该行可能导致错误或意外行为。

如果请求成功,则后端或分析仪中有问题。做一些服务器端日志

@marekful,好的,我对此表示感谢。有什么建议吗?

AJAX通话的网络响应是什么?您可以在网络标签中签入chrome的开发者工具。我敢打赌,您会得到回应,但这是一个错误。

而不是this移动第一个$.ajax的所有选项并存储为变量...然后每个$.ajax看起来都像$.ajax(optionsObject)。可能还需要超时计数器

@CodyG。 -极好的建议!我要去看看。 BRB

当然,当您观看时,它可以正常工作。但与此同时,我发现了这一点:javascript.info/settimeout-setinterval。使用setInterval()可能是问题所在。

@所有人-参见编辑OP。我感到难过。真奇怪

什么版本的IE?...以及哪个jquery版本

尝试将URL更改为此格式url:"something.ashx?"+(new Date().getTime())

@CodyG。,我不确定它们正在运行哪个版本的IE。我问我的老板(他是唯一有权访问其系统的老板),但从未得到答复。我将为此敦促他。 jQuery版本是3.2.1

在这里找到答案:

当IE调试器打开时,jQuery ajax仅在IE中可用

事实证明,只有IE浏览器会缓存ajax响应。 您必须告诉它不要。 添加cache: false可以解决问题。

function GetData(isFirstLoad) {

//console.log("Attempting to obtain the data...");

jQuery.ajax({

url:"something.ashx",

type:"GET",

contentType: 'application/json; charset=utf-8',

cache: false,

success: function(resultData) {

:)这不会是您的最后一个"啊,那是缓存!" 问题,相信我!

如果您想教育我,我全都听!!

我已经更改了计时器的处理方式,使其不会重叠,但是会等到一个任务完成后再开始下一个任务。 这样做使过程不再超时。 (更改反映在OP中)所以(我可以告诉)剩下的唯一可能是问题的原因是,如果由于某种原因确实发生了超时,该如何处理。

哦,我只是说高速缓存问题会以许多其他变体形式出现,无论是JavaScript还是任何编程语言。 主要是"我认为是它的最新信息",但"我们使它使用了缓存,因此它的速度快而不会"。但是,在调试JavaScript时,Firefox和Chrome都可以选择"在开发人员工具时禁用缓存" 是开放的",我强烈建议您这样做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值