_http.get
_を使用して、Angular2/ionic2アプリからHTTP GETリクエストを送信しようとしています。 HTTP GET要求には有効なLinkedinアクセストークンが含まれており、いくつかのプロファイルデータを返すことになっています。ただし、getProfileData()
が呼び出されると、次のエラーが発生します。
_3 229881 group EXCEPTION: Response with status: 0 for URL: null
4 229895 error EXCEPTION: Response with status: 0 for URL: null
5 229909 groupEnd
6 229950 error Uncaught Response with status: 0 for URL: null, http://192.168.178.49:8100/build/js/app.bundle.js, Line: 95774
_
それでも:
let URL = "https://httpbin.org/get?name=hannes"
_onboarding-load.ts:
_import { Component } from '@angular/core';
import { NavController, Platform, Alert } from 'ionic-angular';
import { OnboardingHelloPage } from '../onboarding-hello/onboarding-hello';
import { CordovaOauth, LinkedIn } from 'ng2-cordova-oauth/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map'
@Component({
templateUrl: 'build/pages/onboarding-load/onboarding-load.html',
})
export class OnboardingLoadPage {
private data;
private code;
constructor(private navCtrl: NavController, private platform: Platform, private http: Http) {
this.http = http;
this.navCtrl = navCtrl;
}
public getProfileData() {
let URL = "https://api.linkedin.com/v1/people/~?oauth2_access_token=SOMEVALIDTOKEN&format=json";
//let URL = "https://httpbin.org/get?name=hannes"
this.http.get(URL)
.map(res => res.json())
.subscribe(data => {
this.data = data;
console.log(JSON.stringify(data));
});
// go to next page
this.viewOnboardingHello();
}
...
}
_
これはおそらくCORSの問題です。
Angular2 APPは、呼び出しているAPIとは別のサーバーでホストされています。
これをバイパスする場合(テスト目的のみ)、 this Chrome extension をインストールして追加します
アクセス制御許可元:
あなたのヘッダーに。
実際に使用するには、サーバーからAPIを呼び出して(Node、PHP、Python ...)(angular2 APPがホストされている場合)、angular2 APPにデータを渡す必要があります。 。
ログにそれらのいくつかがありました。少し掘り下げた後、ブラウザが新しいURLへの移動を開始した後、ajaxリクエストが中止されるたびに来るようです。
サイドノートとして、これはサーバーがオフラインのときにも発生します。
ステータス0とURL nullに正式な意味があるのではないかと思っていたので、ここで終わりました。
Jesmine/Karma単体テストの実行時に同様の問題が発生します。長い時間を確認した結果、この問題は一部のサービスが適切にモックされていないことが原因であることがわかりました。テストケースがロードされたサービスコールがブラウザによって中止されたとき。したがって、このエラーが発生しています。