Important:
Oublier en utilisant Ajax et le codage, le décodage du chemin. Que pensez-vous en tirer? Sécurité? Non. On peut comprendre qu'il s'agit d'un encodage bas64 ou il surveille simplement le trafic réseau et lit la réponse de l'appel Ajax.
Il suffit de faire
embedSwf("flashgame","<? =$path['location']?>"),"<?=$path['base_directory']?>","800","600")
Vraiment, vous ne pouvez pas empêcher quelqu'un d'autre de voir les données et sont tout simplement rendre les choses plus compliquées pour vous.
(ou vous devez déchiffrer les données avec JavaScript.)
(réponse originale est toujours correcte quand même)
Ajax est asynchrone donc quelque chose comme var test = decode(s);
ne marchera jamais. La fonction de décodage renvoie avant l'appel Ajax se termine.
À la place, placez votre logique dans le gestionnaire de rappel. Par exemple, si votre code était auparavant:
var retdata = decode('s');
// here comes code that handles retdata
mettre le code en fonction et l'appeler à partir du gestionnaire de succès:
function process(retdata) {
// here comes code that handles retdata
}
function decode(s){
$.ajax({type: "POST",
url: "includes/decode.inc.php",
data: "s=" + s,
success:function(newmsg){
process(newmsg);
}
});
}
Cela semble être un problème très commun à tous les débutants. Vous trouverez beaucoup de questions ici qui traitent du same problem.
Mise à jour:
Il est pas beau, mais vous pouvez changer la fonction de
function decode(s, cb){
$.ajax({type: "POST",
url: "includes/decode.inc.php",
data: "s=" + s,
success:function(data){
cb(data);
}
});
}
et faire
decode("<?=base64_encode($path['location'])?>", function(location) {
decode("<?=base64_encode($path['base_directory'])?>", function(dir) {
embedSwf("flashgame",location,dir,"800","600");
});
});
Mise à jour 2:
Pour comp leteness, vous pouvez rendre l'appel Ajax synchrone, en utilisant async: false
. Alors cela fonctionnera:
function decode(s){
var ret;
$.ajax({type: "POST",
url: "includes/decode.inc.php",
data: "s=" + s,
async: false,
success:function(newmsg){
ret = newmsg;
}
});
return sync;
}
var val = decode(s);
Cependant, ceci bloquera le navigateur jusqu'à ce que l'appel d'Ajax ait fini. Vous devez tester si cela compte dans votre cas ou non.
Mise à jour 3:
Vous pouvez également modifier votre script PHP pour accepter non seulement un paramètre, mais plusieurs et traiter les deux chaînes en une seule fois.
Que fait votre fichier PHP? Vos noms de variables sont difficiles à comprendre. Pourquoi définissez-vous retdata = newmsg? Que faites-vous avec les données renvoyées? S'il vous plaît clarifier et nous serons en mesure d'être plus utile. Merci! –
soit ne pas retourner la variable globale retdata et l'assigner à la variable après l'appel de fonction ou définir retdata dans la fonction de décodage – KoolKabin