Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval计时器上的Ajax调用不工作_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript setInterval计时器上的Ajax调用不工作

Javascript setInterval计时器上的Ajax调用不工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个非常简单的小流程。我有一个间隔计时器,当它过期时,会向服务器发出ajax调用。使用返回的json,它将解析出来并更新DOM。设置间隔设置为1秒。然后服务器对数据库执行一个非常简单的选择。它执行一个需要毫秒才能执行的查询,如果需要的话 在我们的测试服务器上,它运行良好。但是,当它部署到我们的客户时,大多数情况下实际上并没有访问数据库。我们可以在查询分析器中看到它。应该有一个连续的查询流,但它们最多是零星的,通常在点击之间间隔40秒或更长时间 代码如下: setTimeout(functio

我有一个非常简单的小流程。我有一个间隔计时器,当它过期时,会向服务器发出ajax调用。使用返回的json,它将解析出来并更新DOM。设置间隔设置为1秒。然后服务器对数据库执行一个非常简单的选择。它执行一个需要毫秒才能执行的查询,如果需要的话

在我们的测试服务器上,它运行良好。但是,当它部署到我们的客户时,大多数情况下实际上并没有访问数据库。我们可以在查询分析器中看到它。应该有一个连续的查询流,但它们最多是零星的,通常在点击之间间隔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());
…时间像时钟一样每秒钟刷新一次,即使数据库从未被命中

我可以在
错误
中的调试工具中设置断点,它永远不会被命中

如果我们点击refresh,它会工作或几秒钟(我们可以看到查询命中数据库),但随后它会再次减慢速度

令人沮丧的是,它在我们的测试服务器上完美地工作。但很明显,我忽略了一些东西

编辑:

好吧,这真的很奇怪。当我打开调试器时,它会工作。一旦我关闭调试器,它就会停止工作。我甚至不必让网络选项卡运行和捕获事件。只要打开调试器窗口,它就可以工作

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

在这里找到了答案:

事实证明,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) {
在这里找到了答案:

事实证明,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) {

什么是
$.ajax(这个)??是否调用了错误回调?顺便说一句,如果在另一个部署中整个事情都很好,那么你很难期望这是一个编程问题……我在这里的另一个线程上发现,当我试图弄清楚如何使ajax调用在超时的情况下自动执行。也就是说,我可以在我的测试服务器和客户机的生产服务器上设置一个断点,它永远不会被击中。一旦设置了
超时:0
它就再也不会超时了。。。我认为这很好。我从来没有听说过,我非常怀疑它能做到这一点。此
设置的内容取决于JS上下文,因此该行可能会导致错误或意外行为。请尝试将url更改为此表单
url:“something.ashx?”+(new Date().getTime())
什么是
$.ajax(this)??是否调用了错误回调?顺便说一句,如果在另一个部署中整个事情都很好,那么你很难期望这是一个编程问题……我在这里的另一个线程上发现,当我试图弄清楚如何使ajax调用在超时的情况下自动执行。也就是说,我可以在我的测试服务器和客户机的生产服务器上设置一个断点,它永远不会被击中。一旦设置了
超时:0
它就再也不会超时了。。。我认为这很好。我从来没有听说过,我非常怀疑它能做到这一点。此
设置的内容取决于JS上下文,因此该行可能会导致错误或意外行为。请尝试将url更改为此表单
url:“something.ashx?”+(new Date().getTime())
:)这不会是您的最后一个“啊,这是缓存!”问题,相信我!如果你想教育我,我洗耳恭听!!我已经改变了计时器的处理方式,这样它就不会重叠,而是等到一个任务完成后再开始下一个任务。这样做使过程不再超时。(OP中反映的更改)所以唯一剩下的问题(我可以说)可能是如何处理超时是否出于某种原因。哦,我只是说缓存问题在许多其他变体中出现,无论是javascript还是任何编程语言。主要是“我认为这是最新的信息”,但“我们让它使用缓存,所以它很快,所以它不是”。。。然而,在调试javascript时,Firefox和Chrome都有一个选项“在开发人员工具打开时禁用缓存”,我强烈建议::)这不会是你最后一个“它是缓存!”问题,相信我!如果你想教育我,我洗耳恭听!!我已经改变了计时器的处理方式,这样它就不会重叠,而是等到一个任务完成后再开始下一个任务。这样做使过程不再超时。(OP中反映的更改)所以唯一剩下的问题(我可以说)可能是如何处理超时是否出于某种原因。哦,我只是说缓存问题在许多其他变体中出现,无论是javascript还是任何编程语言。主要是“我认为这是最新的信息”,但“我们让它使用缓存,所以它很快,所以它不是”。。。然而,在调试javascript时,Firefox和Chrome都可以选择“在开发人员工具打开时禁用缓存”,我强烈建议这样做。