使用 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”的主要内容,如果未能解决你的问题,请参考以下文章