2017-09-04 2 views
1

Angular 4のJSONP API呼び出しから返されるjsonオブジェクトを読み込もうとしていますが、印刷しようとするとコンソールで "undefined"が表示され続けます。jsonp APIコールでjsonオブジェクトを返します

これは私のSearchService.tsファイルです:

import {Injectable} from '@angular/core'; 
import {Jsonp} from '@angular/http'; 
import 'rxjs/add/operator/map'; 


@Injectable() 
export class SearchService { 
    apiRoot = 'this/is/my/api'; 
    results: any; 
    loading: boolean; 

    constructor(private jsonp: Jsonp) { 
    this.loading = false; 
    } 

    search(term: string) { 
    const apiUrl = `${this.apiRoot}?search=${term}&rows=10&callback=JSONP_CALLBACK`; 
    return this.jsonp.request(apiUrl).map(results => { this.results = results.json().data 
    }); 
    } 

} 

そして、これは私が検索を実行するために使用していsearch.component.tsファイルです:私がしようとした場合

import {Component, OnInit} from '@angular/core'; 
import 'rxjs/add/operator/toPromise'; 
import {SearchService} from '../../services/SearchService'; 

@Component({ 
    selector: 'app-search', 
    templateUrl: './search.component.html', 
    styleUrls: ['./search.component.css'] 
}) 

export class SearchComponent implements OnInit { 

    loading = false; 
    public result; 

    constructor(private uniDirectory: SearchService) { 
    } 

    doSearch(term: string) { 
    this.loading = true; 
    this.uniDirectory.search(term).subscribe(results => this.result = results); 
    this.loading = false; 
    console.log('Result: ' + this.result); 

    } 

    ngOnInit() { 

    } 


} 

その結果をSearchService(つまりconsole.log(results.json());)に出力すると、jsonオブジェクトが出力されます。しかし、doSearch()メソッドで同じものを出力しようとすると、undefinedが出力されます。どんな提案も感謝しています。

+0

[非同期呼び出しからの応答を返す方法は?](https://stackoverflow.c om/questions/14220321/how-do-i-return-as-asynchronous-call) – dfsq

+0

私の質問がどのように重複しているのかよく分かりません。私が間違ってやっていることは? – bawse

+0

あなたの質問は、AJAXという言葉が意味するものの理解の欠如から来ています。リンクされた質問には良い説明があります。 – dfsq

答えて

0

は、あなたがあなたの流通サービスでリターンが欠落したように見えますmap機能をね、 は、私はそれを修正するために管理し、この1

search(term: string) { 
const apiUrl = `${this.apiRoot}?search=${term}&rows=10&callback=JSONP_CALLBACK`; 
return this.jsonp.request(apiUrl) 
      .map(results => { 
       this.results = results.json().data;//you might not need this one 
       return results.json(); //add this one 
       }); 

}

+0

これは動作しません、あなたはプランナーを作成できますか? – bawse

0

(誰かが最初の答えとしてこれを掲示し、それを削除してみてください私がそれを受け入れる前に):

this.uniDirectory.search(term).subscribe((results) => { 
    this.result = results; 
    console.log(this.result); 
}); 
関連する問題