2015-11-20 15 views
6

私はHTML、CSS、JSの基本的な 'シェル'を持つアプリを持っています。ページの主な内容は、複数のajax呼び出しを介して、私のアプリケーションが実行されている別のURLにあるAPIにロードされます。私は、アプリケーションのメイン 'シェル'をキャッシュするためのサービスワーカーを設定しました。要求されたときにキャッシュされたバージョンで応答します。私が抱えている問題は、私のajax呼び出しの応答もキャッシュされていることです。私は、サービスワーカーのfetchイベントにコードを追加する必要があると確信していますが、キャッシュを調べるのではなく、常にネットワークから取得するようにしています。私はAPIへの要求を無視することができるかどうかはわかりませんサービスワーカーでのajaxリクエストの無視

self.addEventListener('fetch', function (event) { 
    // ignore anything other than GET requests 
    var request = event.request; 
    if (request.method !== 'GET') { 
     event.respondWith(fetch(request)); 
     return; 
    } 

    // handle other requests 
    event.respondWith(
     caches.open(CACHE_NAME).then(function (cache) { 
      return cache.match(event.request).then(function (response) { 
       return response || fetch(event.request).then(function (response) { 
        cache.put(event.request, response.clone()); 
        return response; 
       }); 
      }); 
     }) 
    ); 
}); 

は、ここに私のfetchイベントです。

if (request.url.indexOf(myAPIUrl !== -1) { 
    event.respondWith(fetch(request)); 
    return; 
} 

が、クローム開発ツールでネットワーク]タブによると、これらの応答のすべてが、まだサービスワーカーから来ている:私はこれをやってみました。

+0

応答がサービスワーカーから来たことを示す理由は何ですか?また、[string.includes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes)を使用することもできます。 –

答えて

8

無視する要求を処理するのに、event.respondWith(fetch(request))を使用する必要はありません。あなたがevent.respondWithブラウザを呼び出さずに戻ると、あなたのためのリソースがフェッチされます。

あなたのような何かを行うことができます限り、あなたは、あなたがちょうどハンドラから復帰することができ、要求を処理しないことを同期を決定し、デフォルトの要求処理を取るようにさせることができますよう

if (request.methd !== 'GET') { return; } 
if (request.url.indexOf(myAPIUrl) !== -1) { return; } 

\\ handle all other requests 
event.respondWith(/* return promise here */); 

IOWを以上。 Check out this example.

+0

ありがとう、私はこれをやった。 Chrome Devtoolsのネットワークタブを見ると、各リクエストは2回表示されます.1回は成功ですがもう1回は失敗し、ステータスは '(サービスワーカーのフェイルバック)'です。これがなぜなのか? –

+0

興味深い。私は[私たちのサイト](https://trips.furkot.com)で(少なくとも私は*私はそうではないと思う)見ていない。 @ jeff-posnickさんがチャイムでチャットできます:彼の[多少の関連する反応]をチェックしてください(http://stackoverflow.com/questions/33590378/what-status-code200-ok-from-serviceworker-means/33655173#33655173) - あなたは[そこに記載されている例の要点](https://rawgit.com/jeffposnick/7547c69a0780f7782423/raw/c64d054efe60fea88b85b601245bd7157ecdc1e8/index.html)でその動作を再現できますか? – pirxpilot

+0

https://code.google.com/p/chromium/issues/detail?id=477685#c18をご覧ください。 –

関連する問題