Важно:
Забудьте об использовании Ajax и кодировании, расшифровывая путь. Как вы думаете, что вы получаете от этого? Безопасность? Нет. Можно выяснить, что это кодировка bas64, или он просто отслеживает сетевой трафик и читает ответ от Ajax-вызова.
Просто сделай
embedSwf("flashgame","<? =$path['location']?>"),"<?=$path['base_directory']?>","800","600" )
Действительно, вы не можете запретить кому-либо видеть данные и просто усложняете для вас вещи.
( Или вам необходимо расшифровать данные с помощью JavaScript. )
( оригинальный ответ все же правильный, тем не менее )
Ajax является асинхронным, поэтому что-то вроде var test = decode(s);
никогда не будет работать. Функция декодирования вернет до того, как вызов Ajax завершится.
Вместо этого поместите свою логику в обработчик обратного вызова. Например, если ваш код был таким раньше:
var retdata = decode('s');
// here comes code that handles retdata
поместите код в функцию и вызовите его из обработчика успеха:
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);
}
});
}
Это, кажется, очень распространенная проблема для всех начинающих. Здесь вы найдете много вопросов, касающихся той же проблемы .
Обновление:
Это нехорошо, но вы можете изменить функцию на
function decode(s, cb){
$.ajax({type: "POST",
url: "includes/decode.inc.php",
data: "s=" + s,
success:function(data){
cb(data);
}
});
}
и сделать
decode("<?=base64_encode($path['location'])?>", function(location) {
decode("<?=base64_encode($path['base_directory'])?>", function(dir) {
embedSwf("flashgame",location,dir,"800","600" );
});
});
Обновление 2:
Для полноты вы можете сделать синхронный вызов Ajax, используя async: false
. Тогда это будет работать:
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);
Однако это заблокирует браузер до завершения вызова Ajax. Вы должны проверить, имеет ли это значение в вашем случае или нет.
Обновление 3:
Вы также можете изменить свой PHP-скрипт, чтобы он принимал не только один параметр, но несколько, и обрабатывал обе строки за один раз.