javascript - JavaScript 到 PHP 变量值传递错误(document.write 命令不起作用)
问题描述
在将 JavaScript 中的国家名称“US”发送到 PHP 代码后,我将尝试将 PHP 的工作结果接收回 JavaScript 并使用它们。为此,我使用了以下代码。
$ctryNm_php_temp = "document.write(ctryNm);";
结果,似乎 ctryNm 变量的值“US”很好地转移到了 php 代码中。屏幕上打印的 cryNm 值和 $SQL 值包含“US”。
但是,SQL查询的结果返回了一个空值,所以我们检查了一下。IF 语句显示 ctryNm 和 'US' 是不同的值。(屏幕上的输出显示与字符串相同的值和数据类型。)我打印了 $result_obj 并没有发现任何值。
用于检查的 echo 和 console.log 命令结果:
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var ctryNm = "US";
</script>
<?php
$ctryNm_php_temp = "<script language='javascript'>document.write(ctryNm);</script>";
$ctryNm_php = $ctryNm_php_temp;
echo $ctryNm_php . "<br><br>";
echo "--------------" . "<br>";
echo gettype($ctryNm_php) . "<br>";
if ($ctryNm_php == 'US') {
echo "Same" . "<br>";
} elseif ($ctryNm_php != 'US') {
echo "Different" . "<br>";
}
$conn = new mysqli("...", "...", "...");
mysqli_select_db($conn, '...');
mysqli_query($conn, "set names utf8");
$sql = "SELECT * FROM acst_covid_who WHERE country_code = '$ctryNm_php'";
echo $sql . "<br>";
$result_obj = mysqli_query($conn, $sql);
echo "result_obj :" . $result_obj . "<br>";
$date_adjust = 0;
$latestDate_trend = '';
while ($row = mysqli_fetch_array($result_obj)) {
if ((int)$row['confirmed_new'] !== 0) {
$latestDate_trend = $row['date'];
$date_adjust = 1;
} elseif ((int)$row['confirmed_new'] === 0) {
$latestDate_yester_trend = strtotime($row['date'] . "-1 days");
$latestDate_trend = date("Y-m-d", $latestDate_yester_trend);
$date_adjust = 0;
};
};
$result_obj = mysqli_query($conn, $sql);
$total_rows_trend = mysqli_num_rows($result_obj) - $date_adjust;
$arr_trend = array();
while ($row = mysqli_fetch_array($result_obj)) {
array_push($arr_trend, $row);
}
echo $total_rows_trend;
echo json_encode($latestDate_trend);
?>
<script>
var latestDate_js_trend = <?php echo json_encode($latestDate_trend) ?>;
var arr_js_trend = <?php echo json_encode($arr_trend) ?>;
var arr_length_trend = <?php echo $total_rows_trend ?>;
console.log(latestDate_js_trend);
console.log(arr_js_trend);
console.log(arr_length_trend);
</script>
</body>
</html>
解决方案
可悲的是,这不是这样工作的。PHP 代码首先在服务器上执行,因此在网站甚至在浏览器中显示之前。你写的顺序无关紧要。
过程是这样的:
- 您在浏览器中键入地址,它会向服务器询问该页面。
- 服务器实际上运行一个名为 php 的应用程序,该应用程序读取您在代码中编写的内容,仅读取 and 之间的内容
<?php
,?>
没有其他内容(技术上第一个可以是<?=
) - 完成后,服务器将页面发送到浏览器
- 在 PHP 已经更改很久之后,浏览器读取 html 并触发 JavaScript。
这是简化的,但说明了为什么您的代码不起作用。
推荐阅读
- amazon-mws - 从 API 获取亚马逊 MWS 货件状态
- amazon-web-services - Dynamodb boto3 dynamodbstreams get_records
- javascript - 使用格式将表单复制到剪贴板
- javascript - 为子元素动态添加属性
- java - 使用 Recycle View 时无法在 Android Emulator 中看到应用程序栏
- c++ - SSE2 将压缩 RGB 转换为 RGBA 像素(每 3 个字节后添加第 4 个 0xFF 字节)
- javascript - 将 Firestore 文档添加到 observable
- javascript - 多个元素的 indexOf() 方法的替代方法
- python - 了解类以及导致此属性错误的原因
- buildkite - Buildkite如何在docker代理中挂载单个文件