javascript - 如何使用ajax将数据从Javascript传递到PHP

标签 javascript php html

我正在努力从远程服务器接收 JSON 格式的数据并将其保存到数据库中。远程服务器每分钟更新一次数据。

我编写了一个 JavaScript 程序,用于从远程服务器接收 jason 数据。现在的问题是我无法将此数据传递到 PHP 文件以保存在数据库中。

我尝试了 stackoverflow 上相同线程的解决方案,但到目前为止这些还不起作用。

我正在尝试在php中打印从js接收到的数据以查找是否收到数据。我编写的代码可以运行,但没有任何反应。按F12时没有显示错误。

这是我的代码。我在其中做错了什么。

编辑

我发现的另一个问题是它没有打印 echo 。这意味着如果我尝试简单地回显“test”;,它不会打印任何内容。我在下面添加完整的代码,以查看如何/在哪里使用 echo 来打印结果。为什么 echo 没有打印出来?

Javascript:

<script>

        var humArray = [];
        var temArray = [];
        var N = 24;
        for (i = 0; i < N; i++) {
            humArray.push(0);
            temArray.push(0);
        }

    function loadChart() { //fetches json data & calls dspChart() to render graph 
        var wData, hum, tem;
        var requestURL = 'https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s'; //URL of the JSON data
        var request = new XMLHttpRequest({
        mozSystem: true
        }); // create http request
        request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
        wData = JSON.parse(request.responseText);
        hum = wData.humidity;
        tem = wData.temperature;
        humArray.shift();
        humArray.push(hum);
        temArray.shift();
        temArray.push(tem);
        //dspChrt(humArray, temArray);

        $.ajax({
        url: 'index.php',
        type: 'GET',               
        data: { temArray : temArray, humArray : humArray },
        success: function (data) {
        console.log( data );
        },
        error: function (data) {
        console.log(data);
        },

         });            

        }
    }
        request.open('GET', requestURL);
        request.send(); // send the request
            //dspChrt(hum);
    }
      var myVar = setInterval(loadChart, 60000);  
    </script>            

index.PHP

<?php

     if (isset($_GET['data']))
     {

      $WData = $_GET['data'];
      $Humidity = data.humArray;
      $Temprature = data.temArray;

      echo "Hum".$Humidity."Temp".$Temprature;

          } 
     ?>

完整代码

<div class="container">

    <div class="row">

            <div class="col-sm" style="background-color: #FFFFFF">

            <h2 style="color:#B93B8F;">Data from JS</h2>

        <?php

        $servername = "localhost";
        $username = "postgres";
        $password = "test123";
        $dbname = "testDB";

        class TableRows extends RecursiveIteratorIterator {
        function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
        }

            function current() {
                return "<td style='width:150px;border:1px solid grey;'>" . parent::current(). "</td>";
        }

            function beginChildren() {
                echo "<tr>";
        }   

            function endChildren() {
                echo "</tr>" . "\n";
        }
            }


                ?>

            </div>


        <?php

        if (isset($_GET['data']))
        {

        $WData = $_GET['data'];
        $Humidity = $WData.humArray;
        $Temprature = $WData.temArray;

        echo "Hum".$Humidity."Temp".$Temprature;

        } 

        ?>


        <h2>JS Update</h2>
          <div>
            <canvas id="myChart"></canvas>
         </div>


        <div class="col-sm" style="background-color: #FFFFFF">
                <?php
                    echo "<h3>WeatherData</h3>";
                    echo "<table class='table table-hover table-bordered table-reponsive'>";
                    echo "<thead class='table-dark'>";
                    echo "<tr><th>humidity</th><th>temprature</th></tr>";

                try {
                    $conn = new PDO("pgsql:host=$servername;dbname=$dbname", $username, $password);
                    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $stmt = $conn->prepare("SELECT humidity, temprature FROM weatherdata");
                    $stmt->execute();

                    // set the resulting array to associative
                        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
                            foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
                                    echo $v;
                            }
                        }
                    catch(PDOException $e) {
                    echo "Error: " . $e->getMessage();
                                        }       
                    echo "</thead'>";
                    echo "</table>";

                ?>

                <div id="form">

                    <div id="login">
                        <form action="" method="post">
                            <input type="text" name="humidity" id="humidity" required="required" placeholder="Enter humidity"/>
                            <input type="text" name="temprature" id="monikulmio_gps" required="required" placeholder="Enter temprature"/>
                            <input type="submit" value="Insert" name="submit12"/><br />
                        </form>
                        <hr/>
                    </div>

                    <?php

                    if(isset($_POST["submit12"])){

                    try {


                        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
                        $sql = "INSERT INTO weatherdata (humidity, temprature)
                        VALUES ('".$_POST["humidity"]."','".$_POST["temprature"]."')";
                        echo "<meta http-equiv='refresh' content='0'>";
                        if ($conn->query($sql)) {
                            echo "<script type= 'text/javascript'>alert('New Record Inserted Successfully');</script>";
                        }
                        else{
                            echo "<script type= 'text/javascript'>alert('Data not successfully Inserted.');</script>";
                        }

                        $dbh = null;
                    }
                    catch(PDOException $e)
                    {
                        echo $e->getMessage();
                    }

                }   

                $conn = null;

                ?>

                </div>

            </div>


        </div>
    </div>

    </div>

</body>

最佳答案

在你的 php 中,你正在检查 isset $_GET['data'] 但它总是会失败。您发送的数据不是 temArray 和 humArray。因此,请在 $_GET['humArray']$_GET['temArray']

上使用 isset

所以你的代码将是:

<?php

   if (isset($_GET['humArray'])){
       $Humidity = $_GET['humArray'];
       $Temprature = $_GET['temArray'];
       echo "Hum".$Humidity."Temp".$Temprature;
   } 
?>

我还假设:

  1. 你的 js 正在向 php 发送数据。
  2. 即使您说 humArray 和 temArray,您也只是获取变量而不是数组。

如果这些是您需要执行的数组(而不是使用 echo):

print_r($Humidity);
print_r($Temprature);

关于javascript - 如何使用ajax将数据从Javascript传递到PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51982678/

相关文章:

javascript - 所有输入字段的总数不是正确答案

html - 如何在嵌套的 div 内将 span 标签 float 到表外而不被截断?

jQuery Animation 立即启动而不缓动

javascript - 如何在不将其更改为字符串的情况下从函数中提取参数?

javascript - 我可以同步两个 iframe 的滚动条吗?

php - 从 mysql 检索一条记录并将其存储在 PHP 的数组中

php - 用 PHP 发送电子邮件 - 接收空白电子邮件

php - 使用 SQL 选择特定级别的行

css - Div 页面设计在其他分辨率下看起来不对

javascript - 在许多不同位置更改 div 内容的宽度