这里有什么不对?我试图使用转换字符串的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
在这里正确定义了吗?我能做些什么来解决这个问题?
答案 0 :(得分:2)
您正在发送一个对象,密钥为variable
$.post('shop_list.php', {variable: strOut});
这意味着可以通过
访问它$strOut = $_POST['variable'];
strOut
只是引用值
你必须删除return语句,否则$ .post函数永远不会运行
答案 1 :(得分:0)
您的代码中有很多错误的内容。没有特别的顺序:
永远不会调用Decrypt3
函数。
$.post
因为它出现在return语句之后。您可能希望在POST请求之后返回return语句,如下所示:
$.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字符串,但在函数内部,您将其强制转换为整数。那不行。 PHP中的JSON字符串看起来像{...}
或[...]
。这不能强制成整数。
我尝试重构代码,这就是我提出的。它可能不起作用(例如,因为问题#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'];
?>