代码之家  ›  专栏  ›  技术社区  ›  JanOlMajti

SessionStorage,仅获取最后一个值

  •  1
  • JanOlMajti  · 技术社区  · 10 年前

    我有这个函数和代码的PHP文件:

    <?php
       $valuesNight = select_sensor_data7($db, $idSensor, $date22y, $date6t);
        chart_line($valuesNight);
    
        $valuesEvening = select_sensor_data7($db, $idSensor, $date6t, $date14t);
        chart_line($valuesEvening);   
      ?>
    
    <?php function chart_line($values7){ ?>
    <div>
        <script type="text/javascript">
    
            var values7 = <?php echo $values7 ?>;
            var value7 = new Array;
            var time7 = new Array;
    
            for(var o in values7) {
                value7.push(values7[o]['dValue']);
                time7.push(values7[o]['dTimeDate']);
            }
            //alert(time7);
            // store values
            sessionStorage.setItem('myValues', JSON.stringify(value7));
            sessionStorage.setItem('myTime', JSON.stringify(time7));
        </script>
    
        <object type="text/html" data="chart.htm" width="100%"  height="420"></object>
    </div>
    <?php } ?>
    

    select_sensor_data7()

    function select_sensor_data7($db, $idSensor, $dateFrom, $dateTo){
    $stmt = $db->prepare("SELECT * FROM sensorData WHERE _idSensor = :idSensor 
                            AND dTimeDate BETWEEN :dateFrom AND :dateTo ORDER BY dTimeDate");
        $stmt->execute(array(':idSensor' => $idSensor, ':dateFrom' => $dateFrom, ':dateTo' => $dateTo));
        $row2 =$stmt->fetchAll(PDO::FETCH_ASSOC);
        $json=json_encode($row2);
    return $json;
    }
    

    chart.htm :

    <script type="text/javascript">
        var myTime = JSON.parse(sessionStorage.getItem('myTime'));
        var myValues = JSON.parse(sessionStorage.getItem('myValues'));
    
        alert(myTime);
    

    问题: select_sensor_data7 返回带有日期之间的值和时间的对象, chart_line($valuesNight) chart_line($valuesEvening) 运行函数。在功能中 chart_line($values7) alert(time7) 向我展示了正确的价值观,但在 图表.htm 我只得到最后一个值 valuesEvening .

    我哪里做错了?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Latheesan    10 年前

    在我继续之前,请考虑使用良好的命名约定,例如 select_sensor_data7 和变量,如 values7 是糟糕的选择。

    话虽如此;看起来像是 选择传感器数据7 函数返回一个jsonencoded对象数组,即类似于以下内容(虚拟数据):

    [
        {"dValue": "123", "dTimeDate": "00/00/0000"},
        {"dValue": "123", "dTimeDate": "00/00/0000"},
        {"dValue": "123", "dTimeDate": "00/00/0000"}
    ]
    

    因此,您可以在PHP函数中执行以下操作:

    <?php
    
    $valuesNight = select_sensor_data7($db, $idSensor, $date22y, $date6t);
    chart_line('night', $valuesNight);
    
    $valuesEvening = select_sensor_data7($db, $idSensor, $date6t, $date14t);
    chart_line('evening', $valuesEvening);   
    
    ?>
    
    <?php function chart_line($chartId, $jsonDataSource) { ?>
    <div>
        <script type="text/javascript">
    
            var dataSource = JSON.parse('<?php echo $jsonDataSource ?>');
            var dValues = new Array;
            var dTimeDate = new Array;
    
            for (var i = 0; i < dataSource.length; i++) {
                dValues.push(dataSource[i].dValue);
                dTimeDate.push(dataSource[i].dTimeDate);
            }
    
            sessionStorage.setItem($chartId .'_myValues', JSON.stringify(dValues));
            sessionStorage.setItem($chartId .'_myTime', JSON.stringify(dTimeDate));
    
        </script>
    
        <object type="text/html" data="chart.htm?chartId=<?php echo $chartId ?>" width="100%"  height="420"></object>
    </div>
    <?php } ?>
    

    然后你更新你的 chart.html 这样地:

    <script type="text/javascript">
    
    // http://stackoverflow.com/a/901144/2332336
    function getParameterByName(name, url) {
        if (!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
            results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, " "));
    }
    
    // Parse chartId
    var chartId = getParameterByName('chartId', location.href);
    
    // Proceed if you have a chart id
    if (typeof chartId !== 'undefined' && chartId && chartId.length > 0)
    {
        var myTime = JSON.parse(sessionStorage.getItem(chartId +'_myTime'));
        var myValues = JSON.parse(sessionStorage.getItem(chartId +'_myValues'));
    
        // TEST
        console.log('myTime', myTime);
        console.log('myValues', myValues);
    }
    else
    {
        alert('error - invalid chart id');
    }
    
    </script>
    

    P.S.未经测试,如果您在运行此程序时遇到问题,请告诉我。

    推荐文章