Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 类型Observable上不存在属性映射<;ArrayBuffer>;_Angular_Typescript_Angular4 Httpclient_Angular6 - Fatal编程技术网

Angular 类型Observable上不存在属性映射<;ArrayBuffer>;

Angular 类型Observable上不存在属性映射<;ArrayBuffer>;,angular,typescript,angular4-httpclient,angular6,Angular,Typescript,Angular4 Httpclient,Angular6,我试图从Angular v4升级到Angular v6。 我将Http和HttpModule替换为HttpClient和HttpClientModule。 因此,我在一个服务中导入了HttpClient,它来自@angular/common/http,并试图从DBpedia的API中获得结果 import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import {

我试图从Angular v4升级到Angular v6。 我将
Http
HttpModule
替换为
HttpClient
HttpClientModule
。 因此,我在一个服务中导入了
HttpClient
,它来自
@angular/common/http
,并试图从DBpedia的API中获得结果

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {Jsonp, Headers, RequestOptions, URLSearchParams} from "@angular/http";
import {Store} from "@ngrx/store";
import * as fromRoot from '../reducers';
import {Observable} from "rxjs";

@Injectable()
export class KnowledgeapiService {

  server = 'http://lookup.dbpedia.org';
  searchURL = this.server + '/api/search/KeywordSearch?';
  homepage = 'https://susper.com';
  logo = '../images/susper.svg';

  constructor(
    private http: HttpClient,
    private jsonp: Jsonp,
    private store: Store<fromRoot.State>
  ) {}

  public getsearchresults(searchquery){
    let params = new URLSearchParams();

    params.set('QueryString', searchquery);

    let headers = new Headers({ 'Accept': 'application/json' });
    let options:any = new RequestOptions({ headers: headers, search: params });

    return this.http
      .get(this.searchURL, options).map(res =>

        res.json()

      ).catch(this.handleError);
  }

  private handleError (error: any) {
    // In some advance version we can include a remote logging of errors
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg); // Right now we are logging to console itself
    return Observable.throw(errMsg);
  }
}
从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
从“@angular/http”导入{Jsonp,Headers,RequestOptions,URLSearchParams};
从“@ngrx/Store”导入{Store}”;
从“../reducers”以root格式导入*;
从“rxjs”导入{observeable};
@可注射()
导出类知识库服务{
服务器http://lookup.dbpedia.org';
searchURL=this.server+'/api/search/KeywordSearch?';
主页https://susper.com';
logo='../images/susper.svg';
建造师(
私有http:HttpClient,
私有jsonp:jsonp,
私人商店
) {}
公共getsearchresults(searchquery){
设params=newurlsearchparams();
参数集('QueryString',searchquery);
let headers=新的头({'Accept':'application/json'});
let options:any=newrequestoptions({headers:headers,search:params});
返回此文件。http
.get(this.searchURL,options).map(res=>
res.json()
).接住(这个.把手错误);
}
私有句柄错误(错误:任意){
//在某些高级版本中,我们可以包含错误的远程日志记录
让errMsg=(error.message)?error.message:
error.status?`${error.status}-${error.statusText}`:'服务器错误';
console.error(errMsg);//现在我们正在登录到控制台本身
返回可观察抛出(errMsg);
}
}

但是现在,当我从
Http
依赖迁移到
HttpClient
时,每当我使用
map
函数将数据映射到json时,在函数
getsearchresults(searchquery)
中,它给出了一个错误,即
map
函数在类型
Observable上不存在,但其中提供的解决方案对我不起作用。我错在哪里?我是否应该删除
getsearchresults(searchquery)
中的
map
catch
函数基本上你面临着
类型的问题。上述类型脚本代码不一致。例如,没有为
getsearchresults()
函数定义类型。
this.http.get中未定义类型

此外,
httpClient
默认提供json响应,并且
let headers=new headers({'Accept':'application/json'})

检查您是否正在导入中使用
http
模块或
httpClient
模块


检查您是否正确导入了
rxjs/add/operator/map

谢谢您的回答,正如我之前所说,我使用的是
Http
模块,但现在我已切换到
HttpClient
模块。我还导入了
rxjs/add/operator/map
。早些时候,上面的代码一切正常。另外,我认为
标题
不会在这里造成任何问题。我现在删除了
map
函数,但现在它为
catch
函数提供了相同的错误消息。您能提出任何解决方案吗?您能更新您的问题以共享导入语句吗?我已编辑代码以包含导入。请看一看。根本原因是你的标题。从@angular/common/http而不是@angular/http导入HttpHeaders。响应类型将是json而不是arrayBuffer。请参阅。为了进一步理解,请提供查询字符串,看看是否适合您,请详细说明!!在此之前,我可以肯定的是,如果您通过了正确的查询,我只需确认所提供的stackblitz是否有效。是的,它正在生成链接,但由于DBpedia的响应是HTTP,因此混合内容,结果不会显示在控制台上。您能为我提供stackblitz和您的编辑吗