使用 rxjs ajax() 我得到“你的浏览器不支持 CORS”

Posted

技术标签:

【中文标题】使用 rxjs ajax() 我得到“你的浏览器不支持 CORS”【英文标题】:Using rxjs ajax() I get "CORS is not supported by your browser" 【发布时间】:2019-01-07 06:49:53 【问题描述】:

我一直在使用 Rxjs 6,

错误:您的浏览器不支持 CORS

我的代码很简单,

import  ajax  from 'rxjs/ajax';

const ajax$ = ajax(
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body:  'since': 0, 'mode': 'Messages', 'msgCount': 5000,
);

我的代码很简单,

/node_modules/rxjs/internal/util/hostReportError.js:4
    setTimeout(function ()  throw err; );
                             ^

Error: CORS is not supported by your browser
    at getCORSRequest (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:27:15)
    at Object.createXHR (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:93:43)
    at Object.tryCatcher (/node_modules/rxjs/internal/util/tryCatch.js:7:31)
    at AjaxSubscriber.send (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:159:50)
    at new AjaxSubscriber (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:147:15)
    at AjaxObservable._subscribe (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:116:16)
    at AjaxObservable.Observable._trySubscribe (/node_modules/rxjs/internal/Observable.js:43:25)
    at AjaxObservable.Observable.subscribe (/node_modules/rxjs/internal/Observable.js:29:22)
    at Object.<anonymous> (/index.js:17:7)
    at Module._compile (internal/modules/cjs/loader.js:702:30)

【问题讨论】:

【参考方案1】:

您需要将createXHR 函数放在传递给ajax() 调用的实际配置中:

import  XMLHttpRequest  from 'xmlhttprequest'

function createXHR() 
  return new XMLHttpRequest();


const ajax$ = ajax(
  createXHR, // <--- here
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body:  'since': 0, 'mode': 'Messages', 'msgCount': 5000,
);

相关:我也在存储库中回答了您的问题,并提供了更多信息:https://github.com/ReactiveX/rxjs/issues/3978#issuecomment-411472389

【讨论】:

【参考方案2】:

由于某种原因,is a bug 从未真正修复过。首先你要安装xmlhttprequest

npm install xmlhttprequest;

您必须对其进行一些编辑并添加其中之一

## CommonJS
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

## ES2015
import  XMLHttpRequest  from 'xmlhttprequest';

然后,把这个放在ajax()的调用中,

createXHR: function () 
  return new XMLHttpRequest();

应该是这样的,

import  ajax  from 'rxjs/ajax';
import  XMLHttpRequest  from 'xmlhttprequest';

const ajax$ = ajax(
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body:  'since': 0, 'mode': 'Messages', 'msgCount': 5000,
);

【讨论】:

createXHR 在哪里使用?

以上是关于使用 rxjs ajax() 我得到“你的浏览器不支持 CORS”的主要内容,如果未能解决你的问题,请参考以下文章

当页面不活动时,RxJS 6 暂停或缓冲可观察

在 rxjs ajax 回调中解析 JSON 不起作用

javascript RxJS缓存和刷新AJAX方法

javascript RxJS缓存和AJAX响应

RXJS:从 of() 移动到 schedule()

Angular2 RxJS 得到“Observable_1.Observable.fromEvent 不是函数”错误