Как я могу использовать переменную PHP внутри моего JavaScript? - PullRequest
0 голосов
/ 20 марта 2012

Я думаю, что это тот случай, когда я не знаю javascript, но я не могу, ради бога, заставить это работать

По некоторым причинам создание переменных отменяет мой код предупреждения Java. (может быть, это неправильно) И мои Java-переменные установлены неправильно.

Я указал на проблемы в моих комментариях

В моем SQL у меня есть «Все температуры» с диском ассоциативного значения «id». Итак, моя структура данных в этом:

$array[id];
$array[id]=array();
//For every new element
//Using while ($row = mysql_fetch_assoc($result)) 
$array[id][]="temperature";

//second id
$array[id2];
$array[id2]=array();
//For every new element
$array[id2][]="temperature";
$array[id2][]="temperature2";
$array[id2][]="temperature3";
$array[id2][]="temperature4";

МОЯ ПОПЫТКА (НЕПРАВИЛЬНЫЙ КОД): // Я упростил этот код. В моей собственной версии объединение работает ТОЛЬКО, когда я использую фактический индекс «174» вместо переменной javascript, равной 174. Не удалось получить соединение, чтобы получать оповещения в этой упрощенной версии

<?php
$phparray=array();
$phparray["100"]="First Element";
$phparray["101"]="Second Element";
$phparray["102"]="Third Element";

$phparray["100"]=array();
$phparray["101"]=array();
$phparray["100"][]="First Element - Sub 2";
$phparray["100"][]="First Element - Sub 3";
$phparray["101"][]="Second Element - Sub 2";


echo $phparray["100"];  //Does not show 'First Element'. Shows Array
echo $phparray["100"][0];   //Correctly shows sub element
//var_dump($phparray);


?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Associative Array in PHP used in Java Test</title>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script type="text/javascript">

var index=100;
//var index2=<?php echo $phparray[index]; ?>; //Supposed to output 'First Element'
var joined=[<?php echo join($phparray[index], ', '); ?>];   //Supposed to join elements of '100'

alert("hello");  //This line does not work anymore after the var index2 made above
        </script>
    </head>
    <body>

<div id="container" style="height: 500px; min-width: 600px"></div>
    </body>
</html>

РЕДАКТИРОВАТЬ: Вот длинный полный код моей страницы php:

<?php 
include_once("../../config.php"); 
$conn=mysql_connect($dbhost,$dbuser,$dbpasswd) or die ('Error connecting to mysql');
mysql_select_db($dbname);

ini_set('error_reporting', E_ALL);
//ini_set('display_errors',1);
ini_set('log_errors',1);

$sql = "select disk_id from disk";
$result = mysql_query($sql);
$ids = array();
$names=array();
$temperatures = array();
while ($row = mysql_fetch_assoc($result)) {
   $ids[] = $row['disk_id'];
    $temperatures[]=$row['disk_id'];
    //echo "<br>".$row['disk_id'];
}
//

foreach ($ids as $value)
{
//echo "--START ".$value."--<br>";
$sql = "select * from disk_data WHERE disk_id=".$value;
$result = mysql_query($sql);
$dates=array();
    $key = array_search($value, $temperatures);
    $temperatures[$value] = array();

//var_dump($temperatures);
while ($row = mysql_fetch_assoc($result)) 
{   
    $temps = $row['Temperature'];
    $temp = explode("||", $temps);
    $prehex=$temp[3];
    $posthex=hexdec(substr($prehex,-2));

    $predate=$row['create_date'];
    $postdate =strtotime($predate)*1000;


    $output="[".$postdate.", ".$posthex."]";
    //$temperatures[$key][] = $output;
    $temperatures[$value][] = $output;


    $dates[]=$row['create_date'];
    //echo $row['create_date']." ".end($temperatures[$key])."<br>";
}
}

print_r(array_keys($array));
var_dump($temperatures);
foreach ($ids as $value)
{
    //echo $value;
    $key = array_search($value, $temperatures);

    //echo "Key: $key; Value: $temperatures[$value]<br />\n";
    $comma = join($temperatures[$value],", ");
    echo $comma;
    echo "\n";
}



?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Highstock Example</title>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script type="text/javascript">

$(function() {
    var seriesOptions = [],
        yAxisOptions = [],
        seriesCounter = 0,




        //names=[<?php echo join($ids, ', '); ?>],
        names=["174"], //Above code works. BUT only using ID 174 to test
        values=[<?php echo join($temperatures["174"], ', '); ?>], //Supposed to be ALL data. But temp 174
        colors = Highcharts.getOptions().colors;
    //alert(values);

    $.each(names, function(i, name2) {
//alert(seriesOptions.length);
alert(name2.toString()); //Works....
var values=[<?php 
echo join($temperatures[name2], ', '); ?>]; //Doesnt work
//alert(values);
console.log(values);
//document.write(values);


            seriesOptions[i] = 
            {
                name: name2,
                data:values

            };

            // As we're loading the data asynchronously, we don't know what order it will arrive. So
            // we keep a counter and create the chart when all the data is loaded.
            seriesCounter++;

            if (seriesCounter == names.length) 
            {
                createChart();
            }

    });



    // create the chart when all data is loaded
    function createChart() {

        chart = new Highcharts.StockChart({
            chart: {
                renderTo: 'container'
            },

            rangeSelector: {
                selected: 0
            },

                title: {
                    text: 'Test Performance Data',
                    style: {        
                margin: '10px 100px 0 0' // center it   
                }           
        },


            yAxis: {
            title: {text:'Temperature (°C)'}, 
                labels: {
                    formatter: function() {
                        return this.value + '';
                    }
                },
                plotLines: [{
                    value: 0,
                    width: 2,
                    color: 'silver'
                }]
            },

            plotOptions: {
            line: {
                gapSize: 0
            },
                series: {
                    //compare: 'percent'
                }
            },

            tooltip: {
                pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
                yDecimals: 2
            },

            series: seriesOptions
        });
    }

});
        </script>
    </head>
    <body>
<script type="text/javascript" src="../js/highstock.js"></script>
<script type="text/javascript" src="../js/themes/gray.js"></script>
<div id="container" style="height: 500px; min-width: 600px"></div>
    </body>
</html>

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Вы не можете так смешивать PHP и JavaScript.Переменные JavaScript не анализируются в PHP.Даже если index заменяется на переменную $index или 100, ваш код все равно будет пропускать кавычки.

Вместо этого используйте следующее:

<script type="text/javascript">
var index=100;
var array = <?php echo json_encode($phparray); ?>;
var joined = array[index];

Последняя строка выводитследующее:

var joined={"100":["First Element - Sub 2","First Element - Sub 3"],"101":["Second Element - Sub 2"],"102":"Third Element"};

Прежде чем пытаться это сделать, убедитесь, что вы удалили недопустимый комментарий в строке после var index = 100;.В противном случае может быть сгенерировано предупреждение PHP, которое делает код недействительным:

var index=100;
//var index2=PHP Notice:  Use of undefined constant index - assumed 'index' in /tmp/t.php on line 29
PHP Notice:  Undefined index: index in /tmp/t.php on line 29
1 голос
/ 20 марта 2012

PHP запускается на стороне сервера и выводит свое содержимое на веб-страницу, а затем выводит его в браузере и запускает JavaScript. (то есть, когда работает php, он понятия не имеет, что такое «индекс», потому что в его отношении он никогда не был определен.

Я ожидаю, что вы хотите перевести PHP в javascript, чтобы вы могли получить к нему доступ, как захотите на странице. В вашем JavaScript просто добавьте что-то вроде этого:

 var my_array_in_js = <?php echo json_encode($phparray); ?>;

Это приведет к тому, что PHP напечатает свой массив как json, который затем может быть прочитан javascript, как вы захотите. Затем, чтобы прочитать определенный индекс, просто используйте

alert(my_array_in_js[index]);
1 голос
/ 20 марта 2012

Посмотрите на сгенерированный код в браузере клиента, вы увидите, что он выглядит так:

var joined = [First Element - Sub2, Second Element etc.....]

обратите внимание на отсутствие кавычек вокруг вставленных строк. Вы создали синтаксические ошибки Javascript, которые убивают весь блок <script>, в который эти переменные встроены.

Как уже упоминал Роб У, вы должны использовать json_encode () для создания допустимого JavaScript-кода из произвольного текста.

Как правило, если у вас есть PHP, генерирующий что-либо javascript, и особенно при заполнении таких переменных, используйте json_encode () - это избавит вас от таких головных болей.

...