Что здесь не так? Я пытаюсь использовать JS-функцию, которая преобразует строку:
?>
//JS
<script type="text/javascript">
var strIn = <?php echo json_encode($HTTP_RAW_POST_DATA); ?>;
var strKey = key
Decrypt3 = function (strIn, strKey) {
var strOut = new String();
var lenIn = strIn.length;
var lenKey = strKey.length;
var i = 0;
var numIn;
var numKey;
while (i < lenIn) {
numIn = parseInt(strIn.substr(i, 2), 32);
numKey = strKey.charCodeAt(i / 2 % lenKey);
strOut += String.fromCharCode(numIn - numKey);
i += 2;
}
return strOut;
$.post('shop_list.php', {variable: strOut});
};
</script>
//JS
<?php
$strOut = $_POST['strOut'];
И это дает мне:
<b>Notice</b>: Undefined index: strOut in <b>shop-list.php</b> on line <b>40</b><br />
Не strOut
ли, что здесь верно? Что я могу сделать, чтобы исправить эту проблему?
Вы отправляете объект, а ключ variable
$.post('shop_list.php', {variable: strOut});
что означает, что он доступен с
$strOut = $_POST['variable'];
strOut
- это просто переменная javascript, strOut
на значение
И вам нужно удалить оператор return, иначе функция $.post никогда не запускается
С вашим кодом много чего не так. В определенном порядке:
Функция Decrypt3
никогда не вызывается.
$.post
никогда не вызывается, потому что он появляется после оператора return. Вероятно, вы предположили, что запрос на возврат будет отправлен после запроса POST, например:
$.post('shop_list.php', {variable: strOut});
return strOut;
Переменная json_encode()
приведет к синтаксической ошибке. Вы должны бросить его в кавычки:
var strIn = <?php echo "'", str_replace("'", "\\'", json_encode($HTTP_RAW_POST_DATA)), "'"; ?>;
strIn
и strKey
, определенные вне функции, никогда не будут использоваться ни для чего. Внутри функции они будут переопределены аргументами функции. Вероятно, вы планировали передать их функции, да?
key
переменная не определена. Проблематично.
При захвате переменной в PHP вы используете $_POST['strOut']
, но в вашем Javascript-коде вы отправляете его как $_POST['variable']
. Вы должны это исправить.
Переменная numIn
устанавливается в строку JSON, но внутри функции вы numIn
ее к целому. Это не сработает. Строки JSON в PHP выглядят как {...}
или [...]
. Это не может быть принуждено к целому числу.
Я попытался реорганизовать код, и это то, что я придумал. Вероятно, он не работает (из-за проблемы № 7, например), но это было лучшее, что я мог сделать для очистки кода.
<script type="text/javascript">
function Decrypt3(input, key) {
var out = "";
for (var i = 0; i < input.length; i += 2) {
var numIn = parseInt(input.substr(i, 2), 32);
var numKey = key.charCodeAt(i / 2 % key.length);
out += String.fromCharCode(numIn - numKey);
}
$.post('shop_list.php', {strOut: out});
return out;
};
var strIn = <?php echo str_replace("'", "\\'", json_encode($HTTP_RAW_POST_DATA)); ?>;
var strKey = "KEY OF SOME KIND...";
Decrypt3(strIn, strKey);
</script>
<?php
$strOut = $_POST['strOut'];
?>