Cet article présente principalement le paramètre Ajax Access-Control-Allow-Origin pour obtenir un accès inter-domaines. Il est très bon et a une valeur de référence. Les amis dans le besoin peuvent s'y référer
accès inter-domaines ajax. est une ancienne méthode. Il existe de nombreuses solutions au problème. La méthode la plus couramment utilisée est la méthode JSONP. La méthode JSONP est une méthode non officielle, et cette méthode ne prend en charge que la méthode GET, qui n'est pas aussi sûre que la méthode POST.
Même si vous utilisez la méthode jsonp de jQuery et définissez le type sur POST, il deviendra automatiquement GET.
Description officielle du problème :
« script » : évalue la réponse en tant que JavaScript et la renvoie sous forme de texte brut. Désactive la mise en cache en ajoutant un paramètre de chaîne de requête, « _=. [TIMESTAMP]", à l'URL, sauf si l'option de cache est définie sur true. Remarque : Cela transformera les POST en GET pour les requêtes de domaine distant.
Si la méthode POST est utilisée dans domaines, vous pouvez créer une iframe cachée pour y parvenir, ce qui équivaut au téléchargement d'images ajax, mais ce sera plus gênant.
Par conséquent, il est relativement simple d'obtenir un accès inter-domaines en définissant Access-Control-Allow-Origin.
Par exemple : le nom de domaine du client est www.client.com et le nom de domaine demandé est www.server.com
Si vous utilisez directement ajax pour accéder, il y aura ce qui suit erreur
XMLHttpRequest ne peut pas charger http://www.server.com/server.PHP Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée.Origin 'http://www. client.com' n'est donc pas autorisé à accéder.
Ajoutez
// 指定允许其他域名访问 header('Access-Control-Allow-Origin:*'); // 响应类型 header('Access-Control-Allow-Methods:POST'); // 响应头设置 header('Access-Control-Allow-Headers:x-requested-with,content-type');
à l'en-tête de réponse demandé pour obtenir un accès inter-domaines ajax POST.
Le code est le suivant :
client.html Chemin : http://www.client.com/client.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title> 跨域测试 </title> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> </head> <body> <p id="show"></p> <script type="text/javascript"> $.post("http://www.server.com/server.php",{name:"fdipzone",gender:"male"}) .done(function(data){ document.getElementById("show").innerHTML = data.name + ' ' + data.gender; }); </script> </body> </html>
server.php Chemin : http://www.client.com/client.html /www.server.com/server.php
<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); echo json_encode($ret); ?>
Access-Control-Allow-Origin :* signifie autoriser l'accès inter-domaines à partir de n'importe quel domaine nom
Si nécessaireSpécifiez un nom de domaine pour autoriser l'accès entre domaines, remplacez simplement Access-Control-Allow-Origin:* par Access-Control-Allow-Origin:Autorisé nom de domaine
Par exemple : header(' Access-Control-Allow-Origin: http://www.client.com');
Si vous en avez besoin définissez plusieurs noms de domaine pour autoriser l'accès, vous devez utiliser php pour le gérer ici
Par exemple, autorisez www.client.com et www.client2.com à avoir un accès inter-domaines
server.php est modifié en
<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://www.client.com', 'http://www.client2.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); } echo json_encode($ret); ?>
Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère qu'à l'avenir, cela sera utile à tout le monde.
Articles connexes :
Ajax implémente le chargement dynamique des données
Résoudre Spring MVC renvoie les données JSON à ajax rapport d'erreurs problème d'analyseur
Divers gestes du front-endajax interagissant avec le back-end (tutoriel graphique)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!