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が出力されます。どんな提案も感謝しています。
[非同期呼び出しからの応答を返す方法は?](https://stackoverflow.c om/questions/14220321/how-do-i-return-as-asynchronous-call) – dfsq
私の質問がどのように重複しているのかよく分かりません。私が間違ってやっていることは? – bawse
あなたの質問は、AJAXという言葉が意味するものの理解の欠如から来ています。リンクされた質問には良い説明があります。 – dfsq