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