Si vous recevez ce message d'erreur du navigateur:
Aucun en-tête «Access-Control-Allow-Origin» n'est présent sur la ressource demandée. L’origine «…» n’est donc pas autorisée à accéder
lorsque vous essayez de faire une requête Ajax POST / GET à un serveur distant qui est hors de votre contrôle, veuillez oublier cette solution simple:
<?php header('Access-Control-Allow-Origin: *'); ?>
Ce que vous devez vraiment faire, surtout si vous n'utilisez que JavaScript pour faire la requête Ajax, c'est un proxy interne qui prend votre requête et l'envoie au serveur distant.
Tout d'abord dans votre JavaScript, faites un appel Ajax à votre propre serveur, quelque chose comme:
$.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);
}
});
Ensuite, créez un simple fichier PHP appelé proxy.php pour envelopper vos données POST et les ajouter au serveur URL distant en tant que paramètres. Je vous donne un exemple de la façon dont je contourne ce problème avec l'API de recherche d'hôtels 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));
}
En faisant:
echo json_encode(file_get_contents($url));
Vous faites simplement la même requête mais du côté serveur et après cela, cela devrait fonctionner correctement.