2017-06-19 47 views
0

我有下面的脚本,一旦做了一次ajax调用,然后它在每秒之后做一次Ajax调用另一个url。我实现了以下代码,但我认为我无法修复此回调问题以运行第二个函数。setInterval没有任何参数的回调函数

$(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"); 
     }); 
} 

回答

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"); 
     }); 
} 
+0

感谢这解决了它。 –

+1

但仍然使用setInterval - 不推荐使用AJAX – mplungjan

+0

很高兴我可以帮助@VanshajBehl。如果它帮助你解决你的问题,请记住接受我的答案。 –

2

我强烈建议不要使用setInterval和AJAX。如果服务器返回速度很慢,您可能会开始通过呼叫打电话给服务器。如果您使用完成或完成,服务器已尽快返回。

而是把亚军的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"); 
 
    }); 
 
}
执行通过回调

+0

感谢您的建议,但setTimeout超过setInterval的原因是什么? –

+0

如果服务器需要1秒以上的时间才能返回,那么您将开始敲击它 - 在第一个忙时执行第二个呼叫,等等。 – mplungjan

0

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

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"); 
    }); 
} 
+1

这将解决即时问题,但不处理服务器过载 – mplungjan