5

次のような URL を使用して、REST API から JSON データを取得する Spotify アプリを構築しています。

http://www.mydomain.com/api/command?option=value

Spotify アプリのマニフェストで、API ホストに必要なアクセス許可を設定しました。

"RequiredPermissions": [ "http://*.mydomain.com" ]

また、API の応答ヘッダーで Cross-Origin Resource Sharing を構成しました。実際の例を次に示します。

Server: nginx/0.7.65
Date: Thu, 08 Dec 2011 09:07:16 GMT
Content-Type: application/json
Connection: keep-alive
X-Powered-By: Mojolicious (Perl)
Set-Cookie: mojolicious=eyJwcmVmcyI6e30sImZpbHRlcnMiOnsicGllciI6eyJzb3VyY2VzIjpbMjBdfSwiZWxlYyI6eyJzb3VyY2VzIjpbMTMsMTddLCJ4dGFncyI6WyJzaG9lZ2F6ZSJdLCJ0YWdzIjpbImVsZWN0cm9uaWMiXX0sInB1bmtkdWIiOnsieHRhZ3MiOlsicmVnZ2FlIl0sInRhZ3MiOlsicHVuayIsImR1YiJdfX0sImV4cGlyZXMiOjEzMjMzMzg4MzZ9--c6d6214525b5d56785eebc99217394a1; Version=1; Path=/; expires=Thu, 08 Dec 2011 10:07:16 GMT
Content-Length: 23381
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: *

200 OK

Spotify の chrome インスペクターのネットワーク タブで、リクエストがキャンセルされていることがわかります。

Name: command www.mydomain.net/api 
Method: GET 
Status Text: (canceled) 
Type: undefined 
Initiator: jquery-1.js:7180 (Script) 
Size Content: 13B (0B) 
Time Latency: 21ms (0.0 days)

Chrome インスペクターのスナップショット

デスクトップ (Spotify 以外) の Chrome でアプリを実行すると、リクエストはキャンセルされず、すべて問題ありません。

私は何を間違っていますか?それとも、これは Spotify プレビュー リリースのバグ (機能?) でしょうか?

4

5 に答える 5

9

これにはいくつかの原因が考えられます。解決しやすいものから難しいものの順に並べていきます。

  1. RequiredPermissionsmanifest.jsonに正しいものがあることを確認してください
  2. manifest.json に有効な json strjcture があることを確認してください。http://jsonlint.com/ のような Web サイトでこれを行うことができます
  3. BOM 文字 (ファイルの先頭にある目に見えないバイト) を含むファイルを保存していないことを確認してください。これにより、マニフェストの解析が失敗する可能性があります。
  4. クエリを実行しているサーバーがオリジンを受け入れていることを確認してください。Spotify のすべてのアプリには のようなオリジンがありsp://appname、ほとんどのサーバーはデフォルトで http および https プロトコルのみを受け入れるため、 を に設定しAcces-Control-Allow-Origin*、リクエストがキャンセルされないようにすることができます。

最後に、リクエストがキャンセルされたとしてインスペクターに表示されることがありますが、それでも正しいレスポンスが得られるので、それも再確認してください。

お役に立てれば!

編集: 場合によっては、何らかの奇妙な理由で、要求している URL を前に付けRequiredPermissionsずに設定することhttp://も役立ちますhttps://

于 2011-12-14T11:10:16.277 に答える
4

もう 1 つ注意すべきことがあります。

ローカル開発をしている場合。"localhost" または "127.0.0.1" に対して ajax/getJSON 呼び出しを発行しようとしないでください。代わりに Eth/WiFI インターフェイス IP を使用してください

Spotify Web エンジンは、リクエストでこれらの localhost 識別子をブロックするか、ループバック インターフェイスが無視されるか、Windows が再び干渉しました。

これは一部の人には明らかかもしれませんが、理解するのにしばらく時間がかかりました.

于 2012-01-02T10:39:54.567 に答える
4

変更をリロードするために Spotify を再起動してみましたRequiredPermissionsか? 以前は同様の問題がありましたが、再起動すると解決しました。

于 2011-12-12T19:30:11.017 に答える
0

Spotifyは内部でChromiumを使用するため、同一生成元ポリシーに準拠しています。これを回避するには、JSONPを使用します。Spotifyのみを許可するようにウェブホストでオリジンポリシーを設定することをお勧めします。

于 2011-12-15T18:05:56.370 に答える
0

私の問題を引き起こしたのは、ボムのキャラクターでした。

Notepad ++を使用したことを修正するために、エンコード-> BOMなしのUTF-8でエンコード

于 2012-01-23T16:51:53.297 に答える