setInterval没有任何参数的回调函数

时间:2017-06-19 05:24:04

标签: javascript jquery ajax

我有以下脚本执行ajax调用一次,然后在每秒后执行ajax调用另一个url。我实现了以下代码,但我认为我无法解决此回调问题以运行第二个函数。

$(document).ready(function(){
    ajaxSingleCall(function(){
        ajaxCalls();
    });
});

function ajaxSingleCall(){
    $.ajax({
        type: 'GET',
        url: "/matchDataOdds",
        dataType: 'json'
        })
        .done(function(data) {
            data.forEach(addOddsCanvas);
        })
        .fail(function() {
            console.log("Ajax failed to fetch data");
        });
}

function ajaxCalls(){
    setInterval(runner, 1000);
}

function runner() {
    // run your ajax call here
    $.ajax({
    type: 'GET',
    url: "/matchData",
    dataType: 'json'
    })
        .done(function(data) {
            liveFeed(data);
        })
        .fail(function() {
            console.log("Ajax failed to fetch data");
        });
}

4 个答案:

答案 0 :(得分:2)

我强烈建议不要将setInterval与AJAX一起使用。如果服务器返回的速度很慢,您可以在呼叫时通过呼叫开始锤击服务器。如果您使用done或complete,则服务器已尽可能快地返回。

而是将跑步者放在ajaxSingleCall的完成中,然后在跑步者的完成中使用setTimeout

注意:您的代码失败了,因为您没有在ajaxSingleCall

中执行传递的回调

$(function() {
  ajaxSingleCall(); // not taking any parameters anyway...
});

function ajaxSingleCall() {
  $.ajax({
      type: 'GET',
      url: "/matchDataOdds",
      dataType: 'json'
    })
    .done(function(data) {
      data.forEach(addOddsCanvas);
      runner();
    })
    .fail(function() {
      console.log("Ajax failed to fetch data");
    });
}

function runner() {
  // run your ajax call here
  $.ajax({
      type: 'GET',
      url: "/matchData",
      dataType: 'json'
    })
    .done(function(data) {
      liveFeed(data);
      setTimeout(runner, 1000);
    })
    .fail(function() {
      console.log("Ajax failed to fetch data");
    });
}

答案 1 :(得分:2)

您已将回调函数传递到ajaxSingleCall,但它不接受任何参数。你必须实际使用传递的功能。它不会被自动调用:

function ajaxSingleCall(callback){
    $.ajax({
        type: 'GET',
        url: "/matchDataOdds",
        dataType: 'json'
    })
    .done(function(data) {
        data.forEach(addOddsCanvas);
        callback();
    })
    .fail(function() {
        console.log("Ajax failed to fetch data");
    });
}

答案 2 :(得分:1)

尝试从ajaxSingleCall()内部调用它。我在下面编辑了您的代码。

$(document).ready(function(){
    ajaxSingleCall();
});

function ajaxSingleCall(){
    $.ajax({
        type: 'GET',
        url: "/matchDataOdds",
        dataType: 'json'
        })
        .done(function(data) {
            data.forEach(addOddsCanvas);
            ajaxCalls(); // <-- here
        })
        .fail(function() {
            console.log("Ajax failed to fetch data");
        });
}

function ajaxCalls(){
    setInterval(runner, 1000);
}

function runner() {
    // run your ajax call here
    $.ajax({
    type: 'GET',
    url: "/matchData",
    dataType: 'json'
    })
        .done(function(data) {
            liveFeed(data);
        })
        .fail(function() {
            console.log("Ajax failed to fetch data");
        });
}

答案 3 :(得分:0)

ajaxCalls()不会被调用,因为ajaxSingleCall函数不接受任何参数。