ES6とBabelでサイトを構築しています。
スクリプトファイルで、サーバー上のサービスに対してajax呼び出しを行う必要があります。そのために私は次のようにしています:
fetch('url').then(
response => response.json()
).then(
supervisoryItems => doSomething(supervisoryItems)
)
Google Chromeではこれは問題なく機能しますが、FirefoxまたはIE(エラーfetch is undefined
が発生します)では機能しません。 Googleで検索すると、これで修正されるはずです。
import promise from 'es6-promise'
promise.polyfill()
悲しいことにそれは何も変えません、私は同じ問題を抱えています。助けがありますか?
「isomorphic-fetch」モジュールを「package.json」に追加してからインポートする必要があります。
npm install --save isomorphic-fetch es6-promise
その後、あなたのコードで
import "isomorphic-fetch"
このように次の2つのcdnを使用します。
<script src="//cdn.jsdelivr.net/bluebird/3.5.0/bluebird.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.3/fetch.js"></script>
Babel-polyfill( http://babeljs.io/#polyfill )は現在、ポリフィルにフェッチを含みません。私はそれを追加することを考えていました。
this answer で説明されているように、Webpackの ProvidePlugin を imports-loader および exports-loader パッケージとともに使用することもできます。これにより、コードに何かをインポートする必要がなくなります。
config.plugins = [
new webpack.ProvidePlugin({
'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch'
})
];
執筆時点では、3.0.0バージョンのwhatwg-fetch
との互換性の問題があります。回避策は次を使用しています。
new webpack.ProvidePlugin({
fetch: 'exports-loader?self.fetch!whatwg-fetch/dist/fetch.umd'
})
昨夜このまま通りました。最終的に、あらゆる種類のことを試した後、ソリューションは非常に簡単でした:
fetch('url').then(
response => response.json()
).then(
supervisoryItem => doSomething(supervisoryItem)
)
なりました
window.fetch('url').then(
response => response.json()
).then(
supervisoryItem => doSomething(supervisoryItem)
)
TL; DR fetch(stuff)はwindow。fetch(stuff)EDITである必要があります