JavaScript & JSON - PullRequest
       1

JavaScript & JSON

0 голосов
/ 15 июня 2011

Я новичок в JS & JSON. Я борюсь с преобразованием массива JSON в массив JavaScript. Как это сделать?Вот мой код:

var data = {
items: [
<? $i=1; foreach($query->result() as $row){ ?>
<? if($i!=1){ ?>,<? } ?>
{label: '<?=$row->district_name;?>', data: <?=$row->countid;?>}
<? $i++; } ?>
]
};

как получить значение массива JSON для массива JavaScript.Я только что попробовал, но это не работает.пожалуйста, некоторые предложения.вот мой массив javascript

for(i=0;i<5;i++){
chartData[i]=data.items[i].label+";"+data.items[i].data;

}

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Вы действительно не должны слишком об этом думать.PHP отлично выполняет сериализацию массивов как JSON.

var data = {
  items: <?php
    $arr = array();
    foreach($query->result() as $row) {
      $arr[] = array('label' => $row->district_name,
                     'data'  => $row->countid);
    }
    echo json_encode($arr);
    ?>
};

[вставьте тот же отказ от ответственности, как вы пытаетесь создать объект JavaScript] * *

1 голос
/ 15 июня 2011

Как уже говорили другие, будьте осторожны, когда говорите о JavaScript и JSON.Вы действительно хотите создать объект JavaScript, а не JSON.

Не смешивайте PHP и JavaScript, как это.Это ужасно поддерживать.Заранее создайте массив, закодируйте его как JSON * и напечатайте его:

<?php

    $results = $query->result(); // get results

    function m($v) { // a helper function for `array_map`
        return array('label' => $v->district_name, 
                     'data' => $v->countid);
    }

    $data = array('items' => array_map('m', $results));

?>

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

*: здесь мы используем тот факт, что строка JSON также является допустимым JavaScript.Вы можете просто echo это прямо в исходном коде JavaScript.Когда выполняется код JS, это не JSON, он интерпретируется как объект JavaScript.

0 голосов
/ 15 июня 2011

Это JSON:

var foo = "{bar: 1}";

Это не JSON:

var foo = {bar: 1};

Ваш фрагмент кода вообще не использует JSON, и я считаю, что он вам даже не нужен. Если вы используете PHP для генерации некоторого кода JavaScript, вы можете просто настроить свой код PHP для печати текста, который будет содержать real переменных JavaScript. Нет необходимости кодировать вещи как обычный текст!

Теперь ясно, что нам не нужен JSON, давайте воспользуемся подвохом. PHP имеет json_encode () , и мы можем злоупотреблять тем фактом, что строки JSON напоминают переменные JavaScript. Все, что нам нужно сделать, это вызвать json_encode () для нашей переменной PHP и забыть , чтобы процитировать результат:

<?php

$foo = array(
    'bar' => 1,
    'dot' => FALSE,
);

echo 'var JSONString = "' . json_encode($foo) . '";' . PHP_EOL;
echo 'var realVariable = ' . json_encode($foo) . ';' . PHP_EOL;

Сравните:

var JSONString = "{"bar":1,"dot":false}";
var realVariable = {"bar":1,"dot":false};

Редактировать: Да, моя JSONString не является допустимой строкой ... но мы поняли <:-) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...