หากคุณได้รับข้อความแสดงข้อผิดพลาดจากเบราว์เซอร์:
ไม่มีส่วนหัว '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);
}
});
จากนั้นสร้างไฟล์ PHP อย่างง่ายชื่อ proxy.php เพื่อตัดข้อมูล POST ของคุณและผนวกเข้ากับเซิร์ฟเวอร์ URL ระยะไกลเป็นพารามิเตอร์ ฉันขอยกตัวอย่างว่าฉันจะเลี่ยงปัญหานี้ด้วย API การค้นหาของ 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));
}
จากการทำ:
echo json_encode(file_get_contents($url));
คุณเพิ่งจะทำแบบสอบถามเดียวกัน แต่ในฝั่งเซิร์ฟเวอร์และหลังจากนั้นควรทำงานได้ดี