为什么我不能将这个变量从Javascript传递给PHP?

时间:2014-11-18 04:50:29

标签: javascript php variables

这里有什么不对?我试图使用转换字符串的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 />

Isn&#t; t strOut在这里正确定义了吗?我能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:2)

您正在发送一个对象,密钥为variable

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

这意味着可以通过

访问它
$strOut = $_POST['variable'];

strOut只是引用值

的javascript变量

你必须删除return语句,否则$ .post函数永远不会运行

答案 1 :(得分:0)

您的代码中有很多错误的内容。没有特别的顺序:

  1. 永远不会调用Decrypt3函数。

  2. 永远不会调用
  3. $.post因为它出现在return语句之后。您可能希望在POST请求之后返回return语句,如下所示:

    $.post('shop_list.php', {variable: strOut});
    return strOut;
    
  4. json_encode()变量将导致语法错误。你必须把它扔在引号中:

    var strIn = <?php echo "'", str_replace("'", "\\'", json_encode($HTTP_RAW_POST_DATA)), "'"; ?>;
    
  5. 在函数外部定义的strInstrKey变量永远不会用于任何事情。在函数内部,它们将被函数的参数覆盖。您可能希望将它们传递给函数,是吗?

  6. key变量未定义。有问题的。

  7. 在PHP中抓取变量时,您使用的是$_POST['strOut'],但在Javascript代码中,您将其发送为$_POST['variable']。你应该解决这个问题。

  8. numIn变量设置为JSON字符串,但在函数内部,您将其强制转换为整数。那不行。 PHP中的JSON字符串看起来像{...}[...]。这不能强制成整数。

  9. 我尝试重构代码,这就是我提出的。它可能不起作用(例如,因为问题#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'];
    ?>