Вопрос

У меня есть эта функция, которая встраивает вспышку:

function embedswfile(target, swf, base, width, height) {//dosomething}

И я хочу позвонить в такой функции

embedSwf("flashgame",decode("<?=base64_encode($path['location'])?>"),decode("<?=base64_encode($path['base_directory'])?>"),"800","600" )

Идея состоит в том, что всякий раз, когда кто-то ищет любой SWF внутри моего веб-сайта, он не найдет ничего чисто. Я изменит алгоритм кодирования, но это просто временно. Для того, чтобы эта функция работать, всякий раз, когда я вызываю функцию «декодировать», она должна вернуть одно значение. PHP содержит

<?php
echo base64_decode($_POST['s']);
?>

Я попробовал это, но он все еще не работает

var globvar;
function processdata(newmsg) {
    globvar = newmsg;   
}

function decode(s){
    $.ajax({type: "POST",
        url: "includes/decode.inc.php",
        data: "s=" + s,
        success:function(newmsg){
           processdata(newmsg);
        }
    });
return globvar;
}
Это было полезно?

Решение

Важный:

Забудьте о использовании 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, чтобы не только принять один параметр, но несколько и обрабатывать оба строки в одном.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top