【问题标题】:Axios only called once inside self-invoking function (Internet Explorer)Axios 仅在自调用函数中调用一次(Internet Explorer)
【发布时间】:2018-01-31 12:01:56
【问题描述】:

我有一个函数,它每 2.5 秒调用一次,以检查后台运行的任务。如果响应错误,它会调用axios到get一个url,如果响应成功,我停止函数。

这在 Chrome 和 Mozilla 中完美运行,但由于某种原因它在 IE(版本 11)中无法运行。该函数无限调用自身,但查看日志显示它只调用 axios 一次,然后它有res.data.err == "Task not ready" 永远循环,即使后端的任务已经完成。

为什么不能在 IE 上再次调用 axios?我有什么遗漏吗?

checkProgress() { 
    axios.get(url.CHECK_UPLOAD_TASK, { params: { id: this.state.taskID} }).then(res => {
        if(res.data.success){
            this.setState({loading: false});
            //do something if successfully finished task
        } else {
            if(res.data.err == "Task not ready") {
                setTimeout(() => {
                    this.checkProgress();
                },2500);
            } else {
                this.setState({loading: false});
                // do something if task had an error
            }
        }
    });
}

【问题讨论】:

  • 哪个版本的IE?谢谢。
  • @jkris 版本 11

标签: javascript reactjs internet-explorer axios


【解决方案1】:

我在 InternetExplorer(11,Edge)上也遇到了类似的问题(尽管使用 fetch)来轮询服务。我发现使用“Pragma: no-cache”标头解决了它。

你可以试试看:

const config = {
    headers: { Pragma: 'no-cache'},
    params: { id: this.state.taskID }
}

调用应该如下所示:

axios.get(url.CHECK_UPLOAD_TASK, config).then(...)

【讨论】:

  • 谢谢! "axios.defaults.headers.Pragma = 'no-cache'" 对我有用!
【解决方案2】:

谢谢丹尼尔, 那很好啊。这个对我有用。 另一种解决方案是您可以在 axios.create 中定义如下,我们可以正常使用它。 测试了两种解决方案并且效果很好!

const api = axios.create({
  headers: { Pragma: 'no-cache' },
});

当然你必须使用 api.get(...) 而不是 axios.get(...)。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多