Je dispose d'un script JS qui envoie et tente de recevoir des données JSON.Serveur de noeud et serveur Apache - Aucune erreur 'Access-Control-Allow-Origin'
Ce script JS s'exécute sur WAMP et l'autre serveur s'exécute en tant que serveur de nœud. (Le serveur de noeud est sur localhost: 3000).
Lorsque vous tentez d'envoyer/recevoir des données, une erreur est renvoyée dans la console:
XMLHttpRequest ne peut pas charger http://localhost:3000/ ... Réponse à la demande avant le vol ne passe pas vérification de contrôle d'accès: Non « Access- L'en-tête Control-Allow-Origin est présent sur la ressource demandée. L'origine 'http://localhost' n'est donc pas autorisée à accéder.
Mon code Javascript:
function sendHands(){
console.log("sending hands");
var xhr = new XMLHttpRequest();
var params = getHandsFromDom();
var hand1 = params[0];
var hand2 = params[1];
var url = "http://localhost:3000/?hand1="+hand1+"&"+"hand2="+hand2;
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log("player1score: " + json.player1score);
document.getElementById("result").value = xhr.responseText;
}
};
xhr.send();
}
Noeud serveur:
const requestHandler = (request, response) => {
var urlParts = url.parse(request.url, true),
urlParams = urlParts.query, //JSON hand data
body = "";
// if the request is a GET request
if(request.method == 'GET'){
response.writeHead(200, {'Content-Type':'application/json'});
var body = "";
var paramData = "";
request.on('data' , function(data){
body += data;
});
process.on("uncaughtException", function(e){
console.log("An error occurred: " + e);
});
request.on("error", function(e){
console.log("Error caught!");
});
request.on('end', function(){
var hand1 = JSON.parse(urlParams.hand1),
hand2 = JSON.parse(urlParams.hand2),
hand3 = (urlParams.hand3 != null || urlParams.hand3 != undefined)
? JSON.parse(urlParams.hand3) : null,
//process settlement of given hands
hands = _assocArrayGenerator(hand1, hand2, hand3),
settlement = pa.settlement(hands),
jsonSettlement = {
player1score : settlement[0],
player2score : settlement[1],
player3score : settlement[2]
};
response.writeHead(200, {'Content-type':'application/json'});
console.log("Server accessed. Result: " + settlement);
response.end(JSON.stringify(jsonSettlement));
});
}
};
server.listen(port, (err) => {
if (err) {
return console.log('Error occured with the server: ', err);
}
console.log(`Server is listening on http://localhost:${port}`);
})
Quelqu'un pourrait-il me expliquer pourquoi cela se produit et comment fonctionne le correctif donné?
Merci!
Je vais y jeter un coup d'oeil, merci! :) –