Nếu bạn nhận được thông báo lỗi này từ trình duyệt:
Không có tiêu đề 'Kiểm soát truy cập-Cho phép-Xuất xứ' trên tài nguyên được yêu cầu. Do đó, nguồn gốc '' không được phép truy cập
khi bạn đang cố gắng thực hiện một yêu cầu POST / GET Ajax đến một máy chủ từ xa ngoài tầm kiểm soát của bạn, xin vui lòng quên cách khắc phục đơn giản này:
<?php header('Access-Control-Allow-Origin: *'); ?>
Những gì bạn thực sự cần làm, đặc biệt nếu bạn chỉ sử dụng JavaScript để thực hiện yêu cầu Ajax, là một proxy nội bộ lấy truy vấn của bạn và gửi nó đến máy chủ từ xa.
Đầu tiên trong JavaScript của bạn, hãy thực hiện một cuộc gọi Ajax đến máy chủ của riêng bạn, đại loại như:
$.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);
}
});
Sau đó, tạo một tệp PHP đơn giản có tên proxy.php để bọc dữ liệu POST của bạn và nối chúng vào máy chủ URL từ xa làm tham số. Tôi cho bạn một ví dụ về cách tôi bỏ qua vấn đề này với API tìm kiếm của Khách sạn Expedia:
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));
}
Bằng cách làm:
echo json_encode(file_get_contents($url));
Bạn chỉ đang thực hiện cùng một truy vấn nhưng về phía máy chủ và sau đó, nó sẽ hoạt động tốt.