【问题标题】:recursive ajax or setInterval(), WHICH ONE IS BETTER?递归 ajax 或 setInterval(),哪个更好?
【发布时间】:2014-03-06 01:35:57
【问题描述】:

我正在尝试获取消息表并将响应附加到先前获取的结果中...

这是我尝试过的两种方法,都失败了

第一个:递归获取

function fetch(){
        $.ajax({ 
               url: url,
               type: "post",
               data:data,
               timeout: 3000,
               success: function(data){
                      $(selector).append(data);
                      setTimeout(function(){fetch()},3000);
               }
        })
}

第二个:setInterval()

   setInterval(function(){fetch()},3000);
   function fetch(){
                $.ajax({ 
                       url: url,
                       type: "post",
                       data:data,
                       timeout: 3000,
                       success: function(data){
                              $(selector).append(data);
                       }
                 })
    }

几次成功的 ajax 调用后,浏览器死机,控制台显示 "net::ERR_EMPTY_RESPONSE " OR "ERR_CONNECTION_TIMED_OUT"

请指教

谢谢

【问题讨论】:

  • 如果你的另一个 fetch 在你的第一个成功时被调用,你为什么使用 setInterval?另外,你可以只写 setInterval(fetch,3000),你不必将它包装在一个函数调用中。
  • 它们,recursive 和 setInterval,在几次成功调用后都无法工作,所以我想问如何改进这些代码,谢谢你的时间..

标签: ajax recursion settimeout setinterval


【解决方案1】:

如果你想在成功或失败后进行递归调用,你可以这样做

function fetch(url, selector){
    $.ajax({ 
       url:url,
       type:"post",
       data:data,
       timeout:3000,
       success:function(data){
           $(selector).append(data);
           fetch();
       },
       error:function(data){
           fetch();
       }
    });
}

【讨论】:

  • 是的,或者我可以把它放在 complete:function(data){ fetch(); }...谢谢,但几次通话后浏览器仍然死机
  • 这是因为我们不断在页面中添加 html,导致浏览器在几次调用后被冻结...
  • 了解...但我认为问题应该是浏览器正在等待从服务器返回数据;但是,服务器没有响应(net::ERR_EMPTY_RESPONSE)...您知道如何改进它吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2013-03-16
  • 1970-01-01
  • 2011-02-22
  • 2013-06-06
相关资源
最近更新 更多