我想在生成JavaScript文件的PHP脚本中访问$ _REQUEST。这是我的准系统index.php页面:
<html>
<head>
<script src="phpGeneratedScript.js.php"></script>
</head>
<body>
<?php echo json_encode($_REQUEST); ?>
</body>
</html>
这是我的准系统.js.php文件:
<?php echo "alert('".json_encode($_REQUEST)."')"; ?>
当我访问index.php?key=value
时,我会在页面中看到一个查询,但不在警报中。有没有办法从不直接include
d的PHP脚本中访问$ _REQUEST(或$ _GET或$ _POST)?
编辑:要部分回答我自己的问题 - 这会将查询字符串添加到对返回JavaScript文件的php文件的调用中:
<html>
<head>
<?php
$query = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
echo
"<script src='phpGeneratedScript.js.php?$query'></script>"
?>
</head>
<body>
<?php echo json_encode($_REQUEST); ?>
</body>
</html.
但是,这不会处理可能与原始请求一起发送的POST数据。
根据drew010的建议,我尝试了这个:
html
<html>
<head>
<?php
$query = http_build_query($_REQUEST);
echo
"<script src='phpGeneratedScript.js.php?$query'></script>"
?>
</head>
<body>
<?php
if (!$_POST) { ?>
<form action="test.php" method="post">
<!--input type="text" name="name" value="value"--><br>
<input type='submit' name="submit" value='Submit'>
</form>
<? } else {
echo json_encode($_REQUEST);
echo "<br />";
echo json_encode($_POST);
}
?>
</body>
js.php
<?php
echo "console.log('".json_encode($_REQUEST)."');";
echo "console.log('".json_encode($_POST)."')";
?>
点击“提交”按钮后,这是浏览器窗口中的输出:
{"submit":"Submit","PHPSESSID":"b6eb4d1d73fc75976a16031003f58fa0"}
{"submit":"Submit"}
$ _REQUEST和$ _POST都已正确填充。
以下是控制台中的输出:
{"submit":"Submit","PHPSESSID":"b6eb4d1d73fc75976a16031003f58fa0"}
[]
$ _POST数据已添加到$ _REQUEST数据中,但在$ _POST中不可见。这是你所期望的,还是有办法调整我的脚本以正确显示$ _POST数据?
答案 0 :(得分:1)
而不是:
$query = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
echo "<script src='phpGeneratedScript.js.php?$query'></script>";
尝试:
$query = http_build_query($_REQUEST);
带parse_url()
的 PHP_URL_QUERY
只会返回查询字符串中的GET数据。
http_build_query()
将根据GET和POST数据创建一个URL编码的字符串。