2016-04-07 18 views
20

Tôi đang xây dựng một trang web với ES6 và Babel.ES6 `fetch is undefined`

Trong tệp tập lệnh, tôi cần thực hiện cuộc gọi ajax đến dịch vụ trên máy chủ. Cho rằng tôi đang làm như thế này:

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

Trong Google Chrome này chỉ hoạt động tốt, nhưng nó không hoạt động trên trình duyệt Firefox hoặc IE (tôi nhận được lỗi fetch is undefined). Tìm kiếm trên Google Tôi thấy điều này nên khắc phục sự cố:

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

Đáng buồn thay nó không thay đổi bất cứ điều gì, tôi có cùng một vấn đề. Bất kỳ giúp đỡ?

Trả lời

39

Bạn cần thêm mô-đun 'tìm nạp đẳng hình' vào 'package.json' của bạn và sau đó nhập tệp này.

npm install --save isomorphic-fetch es6-promise 

Sau đó, trong mã của bạn

import "isomorphic-fetch" 

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

+0

Có một vài hiện thực khác nữa, nhưng tôi nghe cái này thì tốt. – mpen

+2

BTW, câu lệnh 'import' phân biệt chữ hoa chữ thường. (Không thể chỉnh sửa một char.) –

+0

Bằng cách chạy đến lệnh trên, các gói khác (Express Module for ex.) Đã bị xóa –

0

Chỉ cần trải qua đêm cuối cùng này. Cuối cùng, sau khi thử tất cả các loại của sự vật, giải pháp là khá đơn giản:

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

trở thành

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

TL; DR lấy (công cụ) nên cửa sổ .fetch (công cụ) EDIT Tính năng này hoạt động với tôi trên Chrome

+2

Tùy thuộc. Nếu trình duyệt không thực hiện nó nguyên bản bạn vẫn cần phải thêm một triển khai. –

2

tôi sẽ sử dụng hai dns sau như thế này:

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