Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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 运行几秒钟后,我的AJAX请求开始崩溃_Javascript_Jquery_Ajax_Mongodb_Handlebars.js - Fatal编程技术网

Javascript 运行几秒钟后,我的AJAX请求开始崩溃

Javascript 运行几秒钟后,我的AJAX请求开始崩溃,javascript,jquery,ajax,mongodb,handlebars.js,Javascript,Jquery,Ajax,Mongodb,Handlebars.js,我正在尝试每4秒刷新页面上的两个元素。我当前的ajax设置如下所示: setInterval(function () { update() }, 4000); function update() { $.get('/hello', function (data) { console.log("update") $('#main').html(data); });

我正在尝试每4秒刷新页面上的两个元素。我当前的ajax设置如下所示:

     setInterval(function () {
        update()
     }, 4000);

     function update() {
        $.get('/hello', function (data) {
            console.log("update")
            $('#main').html(data);
        });
     }
<div id="main">

    <div id="recalled">
        <ul id="list">
            {{#each thing}}
            <li>
              this.something
            </li>
            {{/each}}
        </ul>
    </div>

    <div id="more">
        <ul>
            {{#each anotherThing}}
            <li>
               this.property
            </li>
            {{/each}}
        </ul>
    </div>
</div>
其中,我的HTML有一个id为main的div,其中包含两组s

经过几秒钟的工作,我的列表开始疯狂地复制项目,页面开始滞后。我的控制台中出现一个错误,说“资源不足”。另外,我注意到应该记录在控制台中的“更新”并不是每4秒发生一次,而是在不到0.5秒的时间内持续记录

我尝试过使用setTimeout,但它不起作用

我的车把代码如下所示:

     setInterval(function () {
        update()
     }, 4000);

     function update() {
        $.get('/hello', function (data) {
            console.log("update")
            $('#main').html(data);
        });
     }
<div id="main">

    <div id="recalled">
        <ul id="list">
            {{#each thing}}
            <li>
              this.something
            </li>
            {{/each}}
        </ul>
    </div>

    <div id="more">
        <ul>
            {{#each anotherThing}}
            <li>
               this.property
            </li>
            {{/each}}
        </ul>
    </div>
</div>
最初呈现的数据很好

我只想使用ajax每隔几秒钟刷新列表元素,以显示对用户模型的某个属性的任何更新。ajax请求在几秒钟后开始崩溃,没有给我预期的输出


谢谢你的帮助

看看这个。在当前代码中,无论上一次调用的结果如何,您都严格地每4秒调用一次update函数。因为ajax调用是异步的,所以您应该使用setTimeout来确保上一次调用已经完成。

代码中的主要问题是setInterval。setInterval听起来很简单,但这通常是一个缺点。代码的问题是,如果对服务器的请求是否完成,setInterval将丢弃。它只是在4s后将呼叫叠加(可能不是精确的4)。您的api调用有时可能需要4秒以上才能完成,然后您就会陷入混乱

有很多方法可以解决这个问题。一个简单的解决方案是使用

setTimeout(update,4000)
在收到来自api调用的响应后,应在中使用此选项

function update() {
    $.get('/hello', function (data) {
        console.log("update")
        $('#main').html(data);
        setTimeout(update,4000)
    });
 }

听起来您的setInterval调用正在重新加载页面,该页面将再次触发setInterval并添加另一个处理程序,该处理程序也将重新加载页面,该页面将。。。过了一段时间,您就有了许多setInterval处理程序,它们都试图重新加载页面。