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()应该去哪里...或者我是否实际上有不同问题?

+0

认沽份额两个请求后,地图'.MAP(RES => res.json())。份额()。潜艇...' –

+0

这使我....属性共享不存在类型observable Chris

+0

我认为你有一个不同的问题。您的请求网址看起来好吗?您的授权标头设置是否正确?尝试将console.log添加到您的构造函数中,以查看构造函数是否未执行两次。 –

您提到了OPTIONS请求。你是否从不同于你的API的服务器上运行angular 2站点?

如果是这样,那么您将不得不处理CORS - 即浏览器将发送第一个OPTIONS请求并检查响应的标题以查看是否允许CORS。

这可以解释为什么你看到你的后端API