Comment puis-je activer le cross-origin resource sharing sur XAMPP?
J'ai un fichier html sur mon localhost avec un formulaire et jquery/ajax qui gère les données post. Un simple script php recherche les données dans une table mysql base de données
C'est la partie principale:
//$.post('lookup_update.php', $(this).serialize()) //<- local part which works
$.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize()).done(function (data)
{ etc.
Mais quand je point à la ligne lookup_update.php je reçois le message d'erreur suivant dans le navigateur chrome
XMLHttpRequest ne peut pas charger http://www.example.com/projectX/lookup_update.php. Pas de "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine " http://localhost ' est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 404.
Comme je le comprends, j'ai besoin d'utiliser
header("Access-Control-Allow-Origin: *");
pour php. Mais quand je l'ajouter à example.com/lookup_update.php le fichier donne une erreur 404 lorsque le fichier localhost essaie de l'appeler.
J'ai aussi essayé d'ajouter ce qui suit à mon Xampp fichier de configuration d'apache
Header set Access-Control-Allow-Origin "*"
Comment puis-je activer correctement cross-origin resource mon installation de XAMPP??
[MODIFIER]
C'est mon simple formulaire sur mon localhost
<!--Begin form-->
<div id="form" class="result">
<form method="post" id="reg-form" class="form-horizontal">
<div class="controls">
<input type="text" name="code" id="code" placeholder="Code" class="form-control input-lg" />
</div>
</form>
</div>
<!--End form-->
Avec le formulaire suivant jquery code
<script type="text/javascript">
$(document).ready(function ()
{
$(document).on('submit', '#reg-form', function ()
{
var tmpCode = $("#code").val();
// $.post('lookup_update.php', $(this).serialize())
$.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize())
.done(function (data)
{
$("#reg-form").fadeOut('slow', function ()
{
$(".result").fadeIn('slow', function ()
{
console.log("inner test " + tmpCode);
$(".result").html(data);
setTimeout(function () {
location.reload();
$('input').val("");
}, 3000);
});
});
})
.fail(function ()
{
alert('fail to submit the data');
});
return false;
});
});
</script>
[EDIT 2]
OK, je ne pense pas que cela ait à voir avec le en ligne lookup_update.php fichier, comme je suis à l'aide de ce test dans un autre fichier
var testXHR = $.post("http://www.example.com/projectX/lookup_update.php", function (data) {
alert("success:" + data);
})
Et dans la fenêtre pop-up, je vois les données attendues
http://www.example.com/projectX/lookup_update.php
example.com/lookup_update.php
, ou http://www.example.com/projectX/index.php
?Je voulais dire le même fichier que j'ai renommer index.php pour lookup_update.php. C'est ce fichier qui est en ligne et que j'aime appeler localement
Pourriez-vous mettre à jour à la question de la correcte des noms de fichier, un extrait de code où vous ajoutez
header
, et la sortie de la commande curl -v http://www.example.com/_correct_url_here -o /dev/null
OriginalL'auteur alex | 2016-01-19
Vous devez vous connecter pour publier un commentaire.
Vous devez écrire du code ci-dessous au début de votre lookup_update.php
Au lieu de * vous pouvez écrire juste une adresse Ip.
OU
D'abord, vous devez vérifier où est le problème soit sur localhost ou d'un autre serveur.
Essayez ce code : Si vous obtenir certaines données en alerte alors le problème est sur localhost ailleurs sur d'autres serveur.
Si vous êtes l'obtention de données de serveur différent, alors vous pouvez utiliser l'adresse IP. Sur localhost il n'est pas nécessaire.
J'ai essayé
header("Access-Control-Allow-Origin: 2001:980:xxxx:1:ec29:xxxx:fe4c:25c9");
au début de mon example.com/projectX/lookup_update.php mais encore obtenir l'avertissementPermettez-moi d'abord les choses au clair. vous êtes l'appel ajax à partir de localhost et d'obtenir la réponse du serveur différent(pas localhost) ?
oui appel ajax est à partir de localhost
$.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize()) .done(function (data)
et en ligne lookup_update.php echo de données au format jsonOriginalL'auteur Monty
De la SCRO demandes sont "sécurisé" avec de contrôle en amont demandes.
MDN en parle ici
C'est juste une supposition ici, mais vous êtes probablement à l'aide d'un cadre, et que vous avez oublié d'activer (mettre en œuvre) les OPTIONS de l'itinéraire pour vos demandes.
Intéressant, vous ne devriez pas utiliser le caractère générique de l'en-tête ( permettant à tous les sites de la SCRO votre service ), vous devriez plutôt spécifier une liste blanche.
Un autre en-tête que vous devriez être à l'envoi est autorisé demande de la méthode.
Espère que cette aide.
Dans ce cas, double-vérifier votre routage. Vous n'êtes probablement pas atteindre votre script à tous. J'ai aussi modifié la réponse de mentionner un autre en-tête pour envoyer. En tout cas, donner MDN de l'article un peu de lecture pour obtenir une perspective plus large sur cette problématique
ah je vois lookup_update.php en effet utilise un cadre (WordPress)
Peut-être que vous pourriez accepter ma réponse si il a aidé à résoudre votre problème. Si vous avez des problèmes de mise en œuvre de la solution, n'hésitez pas à poser une nouvelle question au sujet de ce problème particulier. Cheers
Pas encore résolu, recréé lookup_update.php afin de ne pas utiliser WordPress fonctions. Encore besoin de plonger dans votre lien et readup
OriginalL'auteur Slytherin