http.get被调用两次
问题描述:
我有这个http.get请求,但它被触发两次。它在我的构造函数中。http.get被调用两次
import { Component } from '@angular/core';
import { NavController, LoadingController } from 'ionic-angular';
import { Auth, User, IDetailedError } from '@ionic/cloud-angular';
import { Http, URLSearchParams, Headers } from "@angular/http"
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/share';
import { DetailsPage } from '../details/details';
import { LoginPage } from '../login/login';
@Component({
selector: 'page-dashboard',
templateUrl: 'dashboard.html'
})
export class Dashboard {
visitors: any;
currentSite: any;
searchDate: String = new Date().toISOString();
constructor(public navCtrl: NavController, public http: Http, public loadingCtrl: LoadingController, public user: User, public auth: Auth) {
if (this.auth.isAuthenticated()) {
this.currentSite = this.user.get('siteName',0);
let loading = this.loadingCtrl.create({
spinner: 'bubbles',
content: 'Fetching visitors ...',
duration: 5000
});
loading.present();
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Basic '+ btoa(this.user.get('siteID',0)+':'+this.user.get('token',0)));
this.http.get('http://api.domain.com/visitors?search_from='+this.searchDate+'&search_to='+this.searchDate, {headers:headers}).map(res => res.json()).share().subscribe(data => {
this.visitors = data.res;
loading.dismiss();
});
} else {
this.navCtrl.setRoot(LoginPage);
}
}
基于Angular2 http.post gets executed twice它看起来像我需要包括股份(),但是当我尝试这个,我得到一个错误..
如果我放在最后的份额()然后我得到“属性不不存在类型的订阅“,如果我把它放在订阅之前,然后我得到”属性共享不存在类型observable“
有人可以告诉我share()应该去哪里...或者我是否实际上有不同问题?
答
您提到了OPTIONS请求。你是否从不同于你的API的服务器上运行angular 2站点?
如果是这样,那么您将不得不处理CORS - 即浏览器将发送第一个OPTIONS请求并检查响应的标题以查看是否允许CORS。
这可以解释为什么你看到你的后端API
认沽份额两个请求后,地图'.MAP(RES => res.json())。份额()。潜艇...' –
这使我....属性共享不存在类型observable –
Chris
我认为你有一个不同的问题。您的请求网址看起来好吗?您的授权标头设置是否正确?尝试将console.log添加到您的构造函数中,以查看构造函数是否未执行两次。 –