如果您从浏览器中收到此错误消息:
所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ ...”
当您尝试对无法控制的远程服务器发出Ajax POST / GET请求时,请忽略以下简单解决方法:
<?php header('Access-Control-Allow-Origin: *'); ?>
您真正需要做的是一个内部代理,特别是如果您仅使用JavaScript来执行Ajax请求时,它可以接收您的查询并将其发送到远程服务器。
首先,在您的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));
您只是在执行相同的查询,但是在服务器端,此后它应该可以正常工作。