[AJAX] requête AJAX sur un autre domaine et variables POST
Bonjour,
Je séche sur ce truc depuis quelques jours... Aussi je me permet de poser la question ici.
Je souhaite intégrer dans un site situé sur le serveur A des requêtes Ajax vers des scripts hébergés sur le serveur B, avec des domaines différents... Normalement, un browser sérieux interdit cela...
Pour le moment, j'ai pensé à ça :
une fonction Javascript :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/* ------------------------------------------------------------------------------------------------------------
ProxyLoadXML(url, addData)
loads an XML document from the given url and returns its reference
(object XMLDocument)
Actually, this function performs like LoadXML, but url is reached by the
meaning of a PHP 'proxy' (proxy.php), to allow cross sites access.
addData stands for passing extra parameters (a string with parameters
separated by semi-colons)
if addData is set (aka length > 0), each parameter POST-transmitted this way :
param0 = ...1st parameter...
param1 = ...2nd parameter...
...
---------------------------------------------------------------------------------------------------------------- */
function ProxyLoadXML(url, addData) {
var xhr = CreateAjax();
var postVars = 'uri='+url;
// traitement des paramètres aditionnels
if(addData.length) {
var reg=new RegExp("[;]+", "g");
var params = new Array;
params = addData.split(reg);
for (var i = 0; i < params.length; i++) {
postVars += '¶m' + i + '=' + params[i];
}
}
xhr.open("POST", 'proxy.php?'+urlend() , false);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.setRequestHeader("Content-length", postVars.length);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Accept', 'text/javascript, text/html, text/plain, application/xml, text/xml, */*');
xhr.onreadystatechange=function() {
if (xmlhttp.readyState == 4) {
/* 4 : état "complete" */
if (xmlhttp.status != 200) {
// 200 : code HTTP pour OK
// Traitement de la réponse. Ici on affiche la réponse dans une boîte de dialogue.
alert('Le serveur a renvoyé une erreur.');
}
}
}
xhr.send(postVars);
return xhr.responseXML;
} |
En fait, cette fonction envoit la requête à un script php situé sur le serveur A (proxy.php) qui va juste lire le fichier sur le serveur B:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
<?php
header("content-type: text/plain");
// Je récupére l'uri du script à utiliser sur l'autre serveur
$url = $_POST['uri'];
// j'ouvre le script en lecture
$handle = fopen($url, "r");
// si tout va bene, je renvoit le résultat
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}
?> |
Ca fonctionne, mais comme un gros malin que je suis, je me rend compte que les paramètres passés en POST avec cette méthode restent coincés dans proxy.php !!! Impossible de les retrouver dans le script php sur le serveur B, évidemment... Cela dit, c'est déjà pas mal de pouvoir requêter Ajax, même sans les variables POST :)
Merci pour toute idée, elle sera la bienvenue, croyez moi !
Et merci aussi de votre indulgence pour ce premier post sur ce forum.
François.