ブラウザからこのエラーメッセージが表示された場合:
要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン '…'はアクセスを許可されていません
制御できないリモートサーバーに対してAjax POST / GETリクエストを実行しようとしている場合は、この簡単な修正を忘れてください。
<?php header('Access-Control-Allow-Origin: *'); ?>
特にAjaxリクエストを実行するためにJavaScriptのみを使用している場合、本当に必要なのは、クエリを受け取ってリモートサーバーに送信する内部プロキシです。
まずJavaScriptで、次のような独自のサーバーへのAjax呼び出しを実行します。
$.ajax({
url: yourserver.com/controller/proxy.php,
async:false,
type: "POST",
dataType: "json",
data: data,
success: function (result) {
JSON.parse(result);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr);
}
});
次に、proxy.phpという単純なPHPファイルを作成して、POSTデータをラップし、パラメーターとしてリモートURLサーバーに追加します。Expedia Hotel検索APIでこの問題を回避する方法の例を紹介します。
if (isset($_POST)) {
$apiKey = $_POST['apiKey'];
$cid = $_POST['cid'];
$minorRev = 99;
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey;
echo json_encode(file_get_contents($url));
}
行うことにより:
echo json_encode(file_get_contents($url));
同じクエリを実行しているだけですが、サーバー側で実行すると問題なく動作するはずです。