Rxjs 5-简单Ajax请求

Rxjs 5-简单Ajax请求,ajax,rxjs,rxjs5,Ajax,Rxjs,Rxjs5,我试图从一个简单的ajax请求中获得价值,但我不知道如何做到这一点。代码如下: Rx.Observable .ajax({ url: 'https://jsonplaceholder.typicode.com/posts', method: 'GET', responseType: 'json' }) .subscribe(function(data) { return data.response; }); 我到处找,没有简单的解释 谢谢 可观察。ajax可以通过以下界面接受字符串或对

我试图从一个简单的ajax请求中获得价值,但我不知道如何做到这一点。代码如下:

Rx.Observable
  .ajax({ url: 'https://jsonplaceholder.typicode.com/posts', method: 'GET', responseType: 'json' })
  .subscribe(function(data) { return data.response; });
我到处找,没有简单的解释


谢谢

可观察。ajax
可以通过以下界面接受
字符串
对象

接口请求{
url?:字符串;//请求的url
body?:any;//请求的主体
用户?:字符串;
异步?:布尔;//请求是否异步
方法?:string;//请求的方法,如GET、POST、PUT、PATCH、DELETE
标题?:对象;//可选标题
超时?:数字;
密码?:字符串;
hasContent?:布尔值;
跨域?:布尔;//如果跨域请求为true,否则为false
withCredentials?:布尔值;
createXHR?:()=>XMLHttpRequest;//如果需要使用备用XMLHttpRequest实现,则要重写的函数
订户?:订户

下面是一些例子:

const{Observable,combinelatetest}=rxjs;//=require(“rxjs”)
const{ajax}=rxjs.ajax;/=require(“rxjs/ajax”)
const{map}=rxjs.operators;//=require(“rxjs/operators”)
//简单的GET请求示例
const simple$=ajax($)https://httpbin.org/get');
//POST请求示例
const complex$=ajax({
网址:'https://httpbin.org/post',
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
“x-rxjs-is”:“太棒了!”
},
正文:{
你好,‘世界!’,
}
});
常量htmlSubscription=CombineTest(简单$,复杂$)
.订阅(([简单,复杂])=>{
const simpleResponse=JSON.stringify(simple.response,null,2);
const complexResponse=JSON.stringify(complex.response,null,2);
document.getElementById('root')。innerHTML=`
得到https://httpbin.org/get
${simpleResponse}
邮递https://httpbin.org/post
${complexResponse}
`;
});


正在加载…
您想使用switchMap

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/dom/ajax';
import 'rxjs/add/observable/combineLatest';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/catch';


 const posts$ = Observable
  .ajax('https://jsonplaceholder.typicode.com/posts')
  .map(e => e.response);


  const htmlSubscription = posts$
  .subscribe(res => {
   console.log(JSON.stringify(res, null, 2));
  });
switchMap展平一个流并将其转换为仅发出内部流响应的流。如果发出第二个内部流,则第一个流被终止,第二个流自行继续

查看此bin,其中演示了通过HTTP传输的请求。

Typescript版本


是的,我知道您可以映射它或控制台。记录它以查看响应。很抱歉,我没有很好地解释我的问题。假设您将其存储在一个变量中。是否有方法调用它并返回值?我已经更正了我的答案,现在我将其用作“变量”。如果您想知道如何在javascript代码中使用Observable,请查看文档中的示例或本要点/课程-快速提问是否有人知道RxJS是否可以进行Ajax调用,那么angular为什么有自己的http库?Ray Fan:因为它们是独立的库。您可以在没有angular的情况下使用RxJS。相反不完全正确,因为Angular在内部使用Rx,但是如果您想使用Rx AJAX功能而不是Angular HTTP服务,那么没有什么可以阻止您这么做。。。
const response$ = request$.switchMap((url) => {
  console.log(url);
  return fetch(url).then(res => res.json());
});
"dependencies": { 
     "rxjs": "^5.1.0"
 }
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/dom/ajax';
import 'rxjs/add/observable/combineLatest';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/catch';


 const posts$ = Observable
  .ajax('https://jsonplaceholder.typicode.com/posts')
  .map(e => e.response);


  const htmlSubscription = posts$
  .subscribe(res => {
   console.log(JSON.stringify(res, null, 2));
  });