排错:调用 rxjs 的 ajax 报 'CORS is not supported by your browser'

  • 胡键
  • 更新于 2023-08-02 18:03
  • 阅读 1143

调用 rxjs 的 ajax 报 'CORS is not supported by your browser'

症状

调用 rxjs 中的 ajax 方法,结果返回以下错误信息:

        throw new Error('CORS is not supported by your browser');
^
Error: CORS is not supported by your browser
    at getCORSRequest (./node_modules/rxjs/internal/observable/dom/AjaxObservable.js:28:1)
    at Object.createXHR (./node_modules/rxjs/internal/observable/dom/AjaxObservable.js:94:1)
    at AjaxSubscriber.module.exports.__webpack_modules__.2939.AjaxSubscriber.send (./node_modules/rxjs/internal/observable/dom/AjaxObservable.js:167:1)
    at new AjaxSubscriber (./node_modules/rxjs/internal/observable/dom/AjaxObservable.js:149:1)
    at AjaxObservable.module.exports.__webpack_modules__.2939.AjaxObservable._subscribe (./node_modules/rxjs/internal/observable/dom/AjaxObservable.js:117:1)
    at AjaxObservable.Observable._trySubscribe (./node_modules/rxjs/internal/Observable.js:44:1)
    at AjaxObservable.Observable.subscribe (./node_modules/rxjs/internal/Observable.js:30:1)
    at MapOperator.module.exports.__webpack_modules__.8230.MapOperator.call (./node_modules/rxjs/internal/operators/map.js:32:1)
    at Observable.subscribe (./node_modules/rxjs/internal/Observable.js:25:1)

原因

问题的根源可不像看上去的那样明了,并非你去查 api 手册加上跟 cors 相关的配置就可以解决的。这个错误跟这个 issue 有关,虽然其状态是 closed 但其实一直并未修复,起码在当前的 rxjs 6 上依旧有这样的问题。

解决

解决之道在上述 issue 的评论中已经给出:

  1. 安装 xmlhttprequest (对于 TypeScript 则是 xmlhttprequest-ts
  2. 然后采用下面类似的代码:
function simpleAsync() {
  ajax({
    url: 'https://blog.dteam.top/posts.html',
    // 记得 import {XMLHttpRequest} from 'xmlhttprequest-ts';
    createXHR: () => new XMLHttpRequest(),
  })
    .pipe(
      ...
    )
    .subscribe(res => {
      ...
    });

其余则按需自行查阅文档进行配置吧,😄

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
胡键
胡键
CSM / 架构师 / 创业者,先后就职于中兴和 SAP,现专注于工业物联网、机器学习和区块链。同时,作为机器学习和区块链技术活动的组织者和分享者活跃于本地社区。