Почему я не могу передать эту переменную из Javascript в PHP?

0

Что здесь не так? Я пытаюсь использовать 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 ли, что здесь верно? Что я могу сделать, чтобы исправить эту проблему?

  • 0
    Две строки находятся в нижней части shop_list.php? Являются ли другие строки частью другой страницы?
  • 0
    Они находятся в одном файле PHP. Что такое shop-list.php
Показать ещё 1 комментарий
Теги:
variables

2 ответа

2

Вы отправляете объект, а ключ variable

$.post('shop_list.php', {variable: strOut}); 

что означает, что он доступен с

$strOut = $_POST['variable'];

strOut - это просто переменная javascript, strOut на значение

И вам нужно удалить оператор return, иначе функция $.post никогда не запускается

  • 1
    Запрос POST также происходит после оператора возврата.
  • 0
    @ SverriM.Olsen - хорошие глаза, это так
Показать ещё 2 комментария
0

С вашим кодом много чего не так. В определенном порядке:

  1. Функция Decrypt3 никогда не вызывается.

  2. $.post никогда не вызывается, потому что он появляется после оператора return. Вероятно, вы предположили, что запрос на возврат будет отправлен после запроса POST, например:

    $.post('shop_list.php', {variable: strOut});
    return strOut;
    
  3. Переменная json_encode() приведет к синтаксической ошибке. Вы должны бросить его в кавычки:

    var strIn = <?php echo "'", str_replace("'", "\\'", json_encode($HTTP_RAW_POST_DATA)), "'"; ?>;
    
  4. strIn и strKey, определенные вне функции, никогда не будут использоваться ни для чего. Внутри функции они будут переопределены аргументами функции. Вероятно, вы планировали передать их функции, да?

  5. key переменная не определена. Проблематично.

  6. При захвате переменной в PHP вы используете $_POST['strOut'], но в вашем Javascript-коде вы отправляете его как $_POST['variable']. Вы должны это исправить.

  7. Переменная 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'];
?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню