web-dev-qa-db-ja.com

Angular GETリクエストエラー、ただしiOSのSafariのみ

wordpressをバックエンドとして使用し、angularjsをフロントエンドとして使用しています。wordpress json APIを使用してデータをフロントに取得しています終わり。

https://wordpress.org/plugins/json-api/

問題

angularを使用して、wordpres json APIからデータを取得しています。次のサービスを作成しました:

this.getPage = function ( slug ) {
    return $http.get('wordpress/api/get_page/?slug=' + slug)
}

コントローラでこのサービスを使用して現在のページを取得します

HTTPService.getPage('home')
    .success(function ( data ) {
        $scope.page = data.page;
        console.log(arguments);
    })
    .error( function () {
        console.log(arguments);
    })

したがって、これは、Safari iOSを除くすべてのブラウザーで正常に機能しています。 Safari iOSでは、エラー引数をログに記録すると、次の応答が返されます。

Error response 0?

これはサファリデバッガです。iPhoneをMacbookに接続しました。私が受け取るエラー応答はエラーコード0です。

これまでに試したこと

Htaccessファイルに `Access-Control-Allow-Origin" * "を設定しましたが、これは機能しないようです。リクエストは同じドメインで相対URLで行われるため、これが問題であるとは思わない。

では、any1は、これがSafariで機能しない理由を知っていますか(iOSのみ)?

前もって感謝します...

[〜#〜]編集[〜#〜]

要求に応じていくつかの追加情報:

18
koningdavid

これは、Safariがデフォルトで「サードパーティのCookieとその他のWebサイトのデータ」をブロックするポリシーを持つ唯一のブラウザーであることによるものだと確信しています。実際、この問題はSafari iOSに限定されるものではなく、OSXのSafariでも発生するはずです。あなたのMacBookでそれが起こらないのは、ある日「プライバシー」のデフォルト設定を変更したからだと私は確信しています。

これを試してSafariを開き、[設定]に移動し、[価格]タブで、[Cookieと他のウェブサイトのデータをブロックする]が[サードパーティと広告主から]に設定されているかどうかを確認してください。これは最初のバージョンであり、最新バージョンのSafariのデフォルトオプションです。

MacBookでは、次のようになります。

enter image description here

そして、iOSでは次のようになります。

enter image description here

これが実際に問題の原因であることを確認するためだけに、この設定を「しない」に変更し、キャッシュをクリアして、その問題の再現を再試行してください。あなたがそれを再現することができないと私はかなり確信しています。

ここで、「Cookieと他のWebサイトデータをブロックする:サードパーティと広告主から」に戻し、最初にキャッシュをクリアすると、次のようになります。その問題をもう一度(iOSまたはOSXのどちらかで)。これが問題の原因であることを確認したら、この設定を「サードパーティおよび広告主から」に戻し、デフォルトの設定で問題を再現して対処できるようにします。

この問題を再テストするたびに、Safaryのキャッシュをクリアすることをお勧めします。そうしないと、APIを提供するサイトを信頼できるとSafariが判断し、問題を再現できない可能性があります。したがって、念のため、これをテストするたびにキャッシュをクリアする

この問題の根本は、Safariが、メインページがコンテンツをロードする前に、ユーザーが「サードパーティのコンテンツ」を提供しているページと直接対話したことを確認したいと考えていることだと思います。

「最適な」ソリューションを提案するには、プロジェクトについてもっと知る必要があります。たとえば、最終的なアプリはAPIと同じドメインに統合されますか?その場合は、運用環境に行っても問題は発生しないはずです。つまり、開発中のアプリが次の場所でホストされる場合:http://whatever.yourDomain.orgとAPIは同じドメイン(yourDomain.org)、その場合、本番環境ではその問題はまったくありません。

一方、APIを別のドメインでホストする必要がある場合は、Safariを「だます」方法を見つける必要があります。これを見てください:

この:

これがお役に立てば幸いです。

19
Josep