循环Ajax调用

时间:2016-12-20 00:06:51

标签: javascript php jquery ajax

我有一个简单的Ajax调用,由于某种原因,我无法调用正确刷新数据。

<!DOCTYPE html>
<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script>
    var myFunction = $(document).ready(function(){
      $("#div1").load("feeds.php");
    });
    setInterval(myFunction, 1000);
    </script>
  </head>
  <body>

  </body>
</html>

如果我在一段时间内切断了我的尝试,它会加载,但只加载一次。

$(document).ready(function(){
  $("#div1").load("feeds.php");
});

我正在进行的任何想法?我对Ajax的理解正在进行中。

谢谢!

3 个答案:

答案 0 :(得分:2)

$(document).ready(...)返回一个jQuery对象 - 因此它不能用作setInterval的参数,它需要一个函数作为它的第一个参数

您的代码需要编写

$(document).ready(function() {
    function myFunction(){
        $("#div1").load("feeds.php");
    }
    setInterval(myFunction, 1000);
});

甚至

function myFunction(){
    $("#div1").load("feeds.php");
}
$(document).ready(function() {
    setInterval(myFunction, 1000);
});

这样,myFunction全局可见

您还需要一个id = div1的元素才能使此代码正常工作

所以:整个事情看起来像

<!DOCTYPE html>
<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script>
        function myFunction(){
            $("#div1").load("feeds.php");
        }
        $(document).ready(function() {
            setInterval(myFunction, 1000);
        });
    </script>
  </head>
  <body>
    <div id="div1"></div>
  </body>
</html>

答案 1 :(得分:1)

我建议使用以下内容而不是使用setInterval。

jQuery(function($){
  //name the method to recursively call it, and invoke it immediately
  (function refreshFeeds(failureCount){
    //if the load failed 5 times in a row, stop trying, something is wrong
    if (failureCount < 5){
      $('#div1').load('feeds.php').then(function success(){
        //request was good, reset failures and execute again after a second
        setTimeout(function(){ refreshFeeds(0); }, 1000);
      }, function error(){
        //request was bad, increment the failure count and execute again after a second
        setTimeout(function(){ refreshFeeds(failureCount + 1); }, 1000);
      } );
    } else {
      console.log('Feeds failed to load 5 times.  Terminating request loop.');
    }
  })(0);
});

答案 2 :(得分:0)

您正在$(document).ready()事件上调用您的函数,该事件在加载DOM时只会被调用一次。你不需要那个部分。

var myFunction = function(){
    $("#div1").load("feeds.php");
};

或者,更常见的语法

function myFunction(){
    $("#div1").load("feeds.php");
};