[axios]Windows 上 axios 的问题(IE 11)

2024-05-15 354 views
8

你好

我试图找出为什么 axios 无法在 Windows (Internet Explorer 11) 上运行。

当我尝试发出帖子或获取请求时,它发送数据很好,但在 .catch() 中返回语法错误:


My call:

axios.post(API_URL, {
    some: data
}).then(function(response) {
    console.log('Yaaaay:', response);
}).catch(function(response) {
    console.log('Noooo :(', response)
});

The response in catch():

{   [functions]: ,   __proto__: { },   
      ABORT_ERR: 20,   
      code: 12,  
      constructor: { },   
      DATA_CLONE_ERR: 25,   
      DOMSTRING_SIZE_ERR: 2,   
      HIERARCHY_REQUEST_ERR: 3,   
      INDEX_SIZE_ERR: 1,   
      INUSE_ATTRIBUTE_ERR: 10,   
      INVALID_ACCESS_ERR: 15,   
      INVALID_CHARACTER_ERR: 5,   
      INVALID_MODIFICATION_ERR: 13,   
      INVALID_NODE_TYPE_ERR: 24,   
      INVALID_STATE_ERR: 11,   
      message: "SyntaxError",   
      name: "SyntaxError",   
      NAMESPACE_ERR: 14,   
      NETWORK_ERR: 19,   
      NO_DATA_ALLOWED_ERR: 6,   
      NO_MODIFICATION_ALLOWED_ERR: 7,   
      NOT_FOUND_ERR: 8,   
      NOT_SUPPORTED_ERR: 9,   
      PARSE_ERR: 81,   
      QUOTA_EXCEEDED_ERR: 22,   
      SECURITY_ERR: 18,   
      SERIALIZE_ERR: 82,   
      SYNTAX_ERR: 12,   
      TIMEOUT_ERR: 23,   
      TYPE_MISMATCH_ERR: 17,   
      URL_MISMATCH_ERR: 21,   
      VALIDATION_ERR: 16,   
      WRONG_DOCUMENT_ERR: 4
   }

我不知道该读什么。

该代码在 Windows/Mac 上的所有其他浏览器中都能完美运行。

我认为这可能是一个 polyfill 问题,所以我将es6-polyfill包含到我的包中,但仍然没有成功。

有什么建议么?

谢谢!

回答

4

也许如果data不指定该参数,axios 在 IE 11 中会失败。(如果是这样,这是一个需要修复的错误。)您可以尝试使用一些数据发出请求吗?

axios.post(API_URL, {})
5

@nickuraltsev 好点。实际上,我正在通过我的发布请求发送数据 - 我只是忘记将其添加到此处的示例中。我现在已经添加了。

我在获取请求时也遇到问题。

2

我现在已经使用 ajax $.get 而不是 axios 测试了相同的代码,然后它工作正常。所以我想问题应该缩小到 axios 的一些兼容性问题?

3

更新:我现在尝试使用fetch库,效果很好。我的所有代码都与 axios 相关,所以我希望能够使用它来代替?

有什么建议么?

2

@rasmuswoelk 您能否提供重现该问题的代码片段?

4

@nickuraltsev 我现在尝试通过创建一段独立的代码来重现该问题,然后它工作得很好。

浏览我自己的代码有点沮丧,因为 IE 没有为我提供非常有用的错误代码,所以我不得不取消注释,直到缩小问题的根源。

我发现的是这样的:

我创建了一个在项目中使用的小模块,名为 request.js。它真正做的就是获取 axios 的实例,添加一些默认值,然后导出它。

看起来像这样:

import axios from 'axios';

axios.defaults.headers.post['X-XSRF-TOKEN'] = Athliit.token;
axios.defaults.xsrfHeaderName = null;

export default axios;

我覆盖“xsrflHeaderName”的原因是在我的项目中我提供了自己的令牌,因此必须停用默认令牌。我通过 make it 做到了这一点null,这显然导致了 IE 中的错误。

相反,我只是将其重命名为一些随机字符串:

axios.defaults.xsrfHeaderName = 'xsrf_default_overwritten';

然后就成功了!

所以问题不是直接由 axios 引起的,但我必须覆盖它的原因是(如前所述)axios 提供它自己的令牌,我需要像这样使用我自己的令牌:

axios.defaults.headers.post['X-XSRF-TOKEN'] = App.token;

现在,我不知道 axios 已经提供了任何明显的解决方案来解决这个问题,所以如果有的话请参考我。

如果不;当我在同名下设置自己的自定义令牌时,也许应该覆盖默认令牌。

不过,谢谢你提供了一个很好的库,我很高兴我发现了这个错误,这样我就可以继续使用它了:-)?

2

@nickuraltsev 我在 IE Edge 中面临同样的问题。它甚至没有触发请求。我得到的回复与@rasmuswoelk 发布的内容相同。我通过创建模块并制作 axios 的通用实例来遵循相同的方法。它适用于其他浏览器,如 chrome、firefox 和 safari。这是我正在使用的代码:

var req = axios.create({ baseURL: config.fullURL, timeout: 1000000000000000000000, }) req.defaults.headers.common['Authorization'] = 'JWT ' + token;

任何帮助都会有很大帮助。

4

在客户端,可以设置请求头:

  • axios.defaults.headers.get['Pragma'] = '无缓存';
  • axios.defaults.headers.get['Cache-Control'] = '无缓存,无存储';在服务器端,设置响应头:
  • https://www.npmjs.com/package/nocache
0

在客户端,可以设置请求头:

  • axios.defaults.headers.get['Pragma'] = '无缓存';
  • axios.defaults.headers.get['Cache-Control'] = '无缓存,无存储';

禁用客户端的缓存足以解决我的问题。 @anhvoduy 谢谢!