2016-04-07 13 views
20

Sto costruendo un sito con ES6 e Babel.ES6 `recupero non è definito`

In un file di script, è necessario effettuare una chiamata ajax a un servizio sul server. Per quel che sto facendo in questo modo:

fetch('url').then(
    response => response.json() 
).then(
    supervisoryItems => doSomething(supervisoryItems) 
) 

In Google Chrome questo funziona bene, ma non funziona su Firefox o IE (sto ottenendo l'errore fetch is undefined). Ricerca su Google ho trovato questo dovrebbe risolvere il problema:

import promise from 'es6-promise' 
promise.polyfill() 

Purtroppo non cambia nulla, io ho lo stesso problema. Qualsiasi aiuto?

risposta

39

È necessario aggiungere il modulo 'isomorphic-fetch' al proprio 'package.json' e quindi importarlo.

npm install --save isomorphic-fetch es6-promise 

Poi nel codice

import "isomorphic-fetch" 

Vedi https://www.npmjs.com/package/isomorphic-fetch

+0

C'è un paio di altre implementazioni troppo, ma ho sentito di questo bene. – mpen

+2

BTW, l'istruzione 'import' fa distinzione tra maiuscole e minuscole. (Impossibile modificare un carattere.) –

+0

Eseguendo al comando precedente, sono stati rimossi altri pacchetti (Modulo espresso per ex.) –

0

appena passato attraverso questa ultima notte. Alla fine, dopo aver provato ogni sorta di cose, la soluzione era abbastanza semplice:

fetch('url').then(
response => response.json() 
).then(
supervisoryItem => doSomething(supervisoryItem) 
) 

divenne

window.fetch('url').then(
response => response.json() 
).then(
supervisoryItem => doSomething(supervisoryItem) 
) 

TL; DR fetch (roba) dovrebbe essere finestra .fetch (roba) EDIT Questo ha funzionato per me su Chrome

+2

Depends. Se il browser non lo implementa in modo nativo, è comunque necessario aggiungere un'implementazione. –

2

userò i due seguenti dns in questo modo:

<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>