[解決済み] file:// URLから実行されるアプリケーションのリクエストで、"Origin null is not allowed by Access-Control-Allow-Origin" エラーが発生する。
質問
jQueryのAJAXサポートを通じて、FlickrとPanoramioから画像を取得するページを開発しています。
Flickr側は問題なく動作しているのですが、Flickr側で
$.get(url, callback)
Panoramio からは、Chrome のコンソールにエラーが表示されます。
XMLHttpRequestを読み込むことができません http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150 . Access-Control-Allow-Originでは、OriginのNULLは許可されていません。
ブラウザから直接そのURLを問い合わせると、正常に動作します。 どうなっているのでしょうか。また、これを回避することはできるのでしょうか。 私がクエリの構成を間違えているのか、それともPanoramioが私がやろうとしていることを邪魔しているのでしょうか?
での検索では、有用なマッチは見つかりませんでした。 エラーメッセージ .
EDIT
以下は、この問題を示すサンプルコードです。
$().ready(function () {
var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150';
$.get(url, function (jsonp) {
var processImages = function (data) {
alert('ok');
};
eval(jsonp);
});
});
あなたは オンラインでサンプルを実行する .
EDIT 2
Darinさんにお世話になりました。 上記のコードは間違っています。 代わりにこれを使用してください。
$().ready(function () {
var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&minx=-30&miny=0&maxx=0&maxy=150&callback=?';
$.get(url, function (data) {
// can use 'data' in here...
});
});
解決方法は?
ちなみに、私が知る限りでは、2つの問題があったようですね。
-
に型指定子 "jsonp" を渡していませんでしたか?
$.get
そのため、通常の XMLHttpRequest を使用しています。しかし、ブラウザはCORS(Cross-Origin Resource Sharing)をサポートしており、サーバーがOKすればクロスドメインのXMLHttpRequestを許可することができます。そこでAccess-Control-Allow-Origin
ヘッダーの登場です。 -
file://のURLから実行しているとのことでしたね。CORSヘッダがクロスドメインのXHRがOKであることを知らせるには、2つの方法があります。ひとつは
Access-Control-Allow-Origin: *
(を使用してFlickrに到達していた場合、それは$.get
の内容をエコーバックするものです。Origin
ヘッダを作成します。しかしfile://
のURLは、NULLのOrigin
これは、echo-backで認証することができません。
1つ目はDarinの提案で遠回しに解決しました。
$.getJSON
. これは、リクエストタイプをデフォルトの "json" から "jsonp" に変更するためのちょっとしたマジックを行います。
callback=?
をURLで指定します。
からのCORSリクエストを実行しようとしなくなったことで、2つ目は解決しました。
file://
のURLになります。
他の方にもわかりやすいように、簡単なトラブルシューティングの手順をご紹介します。
-
JSONPを使おうとしている場合は、以下のいずれかになっていることを確認してください。
-
を使用しています。
$.get
を設定しdataType
からjsonp
. -
あなたが使っているのは
$.getJSON
を含んでおりcallback=?
を URL に追加しました。
-
を使用しています。
-
CORS経由でクロスドメインのXMLHttpRequestを行おうとしている場合...
-
を介してテストしていることを確認してください。
http://
. を介して実行されるスクリプトはfile://
は、CORS のサポートが制限されています。 - ブラウザで確認する は実際にCORSをサポートしています。 . (Opera と Internet Explorer は遅れています)
-
を介してテストしていることを確認してください。
関連
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
[解決済み] Access-Control-Allow-OriginでOriginのNULLが許可されていない。
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] Access-Control-Allow-Origin複数オリジンのドメイン?
-
[解決済み] ローカルファイルの読み込み時に "Cross origin requests are only supported for HTTP." というエラーが発生する。
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] アクセス制御-許可-起源のワイルドカードサブドメイン、ポート、プロトコル
-
[解決済み】Access-Control-Allow-OriginでOriginが許可されない。
-
[解決済み】XMLHttpRequest Originのnullが許可されない file:///からfile:///へのAccess-Control-Allow-Origin (Serverless)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jsを使った簡単な照明スイッチのコード
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vueにおけるv-forループオブジェクトのプロパティ
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
jq は html ページとデータを動的に分割する。