2017-06-19 9 views
0

私は毎秒ajax呼び出しを1回行った後、別のURLにajax呼び出しを行います。次のコードを実装しましたが、このコールバックの問題を修正して2番目の関数を実行できないと思います。引数なしの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で使用しないことを強くお勧めします。サーバーの復帰が遅い場合は、コール時にサーバーのハンマーリングを開始することがあります。 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"); 
 
    }); 
 
}
渡されたコールバックを実行していなかったので、あなたのコードは失敗しました

+0

アドバイスをいただきありがとうございますが、setTimeoutの理由は何ですか? –

+0

サーバーが戻ってくるまでに1秒以上かかる場合は、ハンマー打ちを開始します。最初の呼び出しを実行している間に2回目の呼び出しを発行します。 – mplungjan

0

ajaxSingleCall関数はパラメータを取らないため、ajaxCalls()は呼び出されません。

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

関連する問題