首页 > 解决方案 > 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 命令结果:

用于检查的 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>

标签: javascriptphpdocument.write

解决方案


可悲的是,这不是这样工作的。PHP 代码首先在服务器上执行,因此在网站甚至在浏览器中显示之前。你写的顺序无关紧要。

过程是这样的:

  1. 您在浏览器中键入地址,它会向服务器询问该页面。
  2. 服务器实际上运行一个名为 php 的应用程序,该应用程序读取您在代码中编写的内容,仅读取 and 之间的内容<?php?>没有其他内容(技术上第一个可以是<?=
  3. 完成后,服务器将页面发送到浏览器
  4. 在 PHP 已经更改很久之后,浏览器读取 html 并触发 JavaScript。

这是简化的,但说明了为什么您的代码不起作用。


推荐阅读