2016-05-18 9 views
-1

JavaScriptを使用して次のエラーを検出して処理する方法がわかります。JavaScript:ソースで再試行404

は、リソースの読み込みに失敗しました:サーバーは404(ファイルが見つかりません)の状態で応答し

を、それが発見されるまで私は何をしたいのは404を取得中にファイルをフェッチしようとしておくことです。

これはオーディオストリームに関するものです。

ありがとうございます。

UPDATE:私の仕事、これまで

document.getElementById('audio').addEventListener("ended",function() { 
     this.src = "someSource"; 
     this.play(); 
    });` 

このコードは、私のオーディオソースがダウンしたときに検出し、それを再ロードします。私がしたいのは、サーバが再び起動するまでソースをリロードし続けることです。

+0

あなたが既に持っている関連するJSコードを提供できますか? – sp00m

+0

また、コンソールのスクリーンショットが役立つかもしれません。 –

+0

@ sp00mお返事ありがとうございます。私は自分の投稿を更新しました。 –

答えて

1

約束どおりに再帰があります。

あなたは(オーディオ要素により解雇適切なイベントでの約束を解決するか、拒否することによって)(モックなし)と同様のものを得ることができる

基本的にあなたが失敗したコールバックで

// this function mocks an asynchronous call which fails 5 times before succeeding 
 
var mockAsynchronousLoad = (function() { 
 
    var counter = 0; 
 
    return function(url) { 
 
    var d = $.Deferred(); 
 
    setTimeout(function() { 
 
     if (counter >= 5) { 
 
     d.resolve("mymusic.mp3"); 
 
     counter = 0; 
 
     } else { 
 
     d.reject("404"); 
 
     counter++; 
 
     } 
 
    }, 200); 
 
    return d.promise(); 
 
    } 
 
}()); 
 

 

 
var repeatLoad = (function() { 
 
    var failed = 0; 
 

 
    return function(limit) { 
 
    mockAsynchronousLoad() 
 
     .done(function(a) { 
 
     document.write("fetched: " + a + "<br>"); 
 
     failed = 0; 
 
     }).fail(function(a) { 
 
     document.write("failed with: " + a + "<br>"); 
 
     if (failed++ < limit) { 
 
      document.write("retrying <br>"); 
 
      repeatLoad(limit); 
 
     } else { 
 
      document.write("too many failures<br>"); 
 
      failed = 0; 
 
     } 
 
     }); 
 
    }; 
 
}()); 
 

 
repeatLoad(10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
をあなたの関数を再呼び出し