React Fetch在IE11中不起作用

时间:2016-05-16 16:22:17

标签: javascript reactjs fetch-api

我有一个ReactJS应用程序在Chrome中按预期工作,但在IE-11中失败。

问题是这样的 - 我们有两个下拉列表,这些列表是在首次加载页面时从其他服务填充的。该应用程序在SSL下运行。当页面通过IE-11加载时,我得到一个IE-11错误问题,其中第一个请求调用被第二个请求调用取消 - 这里描述了错误:

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/1282036/

所以,我只是向社区询问IE-11是否有解决方法,或者在那里依次实现我的代码,如果第一个完成则第二个被调用:

export let getMainData = (dtType, url)=> {
return dispatch=>{
       dispatch(sendGet(dtType));
       const action = (async(url) => {
              const response = await fetch(url);
                 let data = await response.json();
                    dispatch(receiveGet(dtType,data));
     });
   action(url);
 };
 };

上面的代码是公共代码,React App中的其他人使用它。那么我在想什么,如果有一个抽象级别,两个下拉列表可以顺序调用,然后调用上面的下面,也许?

5 个答案:

答案 0 :(得分:20)

只需将isomorphic-fetch包含为polyfill,即可在不受支持的浏览器上使用。

https://github.com/matthew-andrews/isomorphic-fetch

答案 1 :(得分:4)

与ReactJS无关,但我希望对像我一样登陆这里的其他人有用。

在ASP.NET MVC Web应用程序的上下文中,我发现Github fetch polyfillTaylorHakes' Promise polyfill很容易上手。两者都是https://ourcodeworld.com

推荐的

答案 2 :(得分:2)

您似乎正在使用IE尚未支持的Fetch API。这就是您的应用在Chrome上运行的原因。

我建议你转到第三方lib,比如Axios,superagent等......

答案 3 :(得分:1)

正如所指出的,IE11不支持fetch,我的React应用程序也遇到了这个问题。或者,您可以使用Axios

如果您要迁移(或可以迁移),请检查My answerthis post

基本上,请检查以下代码:

获取JSON帖子请求

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            body: JSON.stringify({
                property_one: value_one,
                property_two: value_two
            })
        };
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
    let data = await response.json();
    // do something with data
}

Axios JSON发布请求

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            url: url,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            data: {
                property_one: value_one,
                property_two: value_two
            }
        };
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
    let data = await response.data;
    // do something with data
}

我总是有应用程序使用的主要请求功能,所以如果你使用fetch或axios并不重要。例如,在' your-common.js':

async function request(url, method, objectData){
    // use axios or fetch or isomorphic-fetch
}

因此,如果您的完整应用程序正在使用您的请求函数,您只需更改该函数中的库,只要您返回相同的对象或值,就不会造成任何损害。如果使用async / await,您还可以在try / catch块中包装fetch(或axios或您使用的任何http库)来处理promise。

答案 4 :(得分:0)

IE不提供支持使用的支持。 您需要使用一些polyfill来解决此问题。 您可以使用http://github.github.io/fetch/