Как использовать JSON из db/php в JavaScript
Я использую плагин для отображения некоторых данных. Данные поступают из БД и в json файл - script отлично работает. Я решил использовать данные непосредственно из php-вывода вместо создания json файла. По какой-то причине javaScript не принимает прямой ввод php. Я использую codeigniter MVC
Вот пример кода, который в настоящее время работает:
$.getJSON('_data/index/data.json', function(data){ ...
Вот что я пробовал:
var dataMap = '<? print $mapData;?>';
$.getJSON(dataMap, function(data){...
* РЕДАКТИРОВАТЬ 2 *
На основе ответов - эта опция также не работает.
var dataMap = '<?php echo $mapData;?>';
$.get(dataMap, function(data){...
И вот данные json
{"countries":{"AL":"1","GB":"1","RS":"1","BG":"6","CA":"3","AT":"2","CD":"1"}}
ИЗМЕНИТЬ
$mapDatap >
FOREACH LOOP
$retdata['countries'][] = strtoupper($row->code);
$retdata['num'][] = $row->num;
ENDFOREACH LOOP
$retdata['countries'] = array_combine($retdat['code'], $retdata['num']);
$retdata = json_encode($retdata);
И затем он печатается в файл как обычно. Это в модель, затем я передаю ее контроллеру, а затем в представление. Строка такая же в $dataMap
, что у меня есть в файле, и тот, который отправляется в представление.
Ответы
Ответ 1
Если вы просто собираетесь вставлять данные JSON в переменную javascript (вместо использования AJAX), вам вообще не нужен вызов getJSON
. Просто напишите объект прямо следующим образом.
var js_object = <?php echo $mapData; ?>;
alert(js_object.countries.AL);
alert(js_object.countries.GB);
Обратите внимание, что строка PHP не отражается на включение кавычек, это означает, что вы непосредственно создаете литерал объекта javascript, а не строку, которая затем должна быть проанализирована в объект через JSON.parse()
Ответ 2
Следуя из вашего обновленного кода, похоже, что вам вообще не нужно вызывать getJSON
, поскольку у вас уже есть данные json.
Просто возьмите <? echo $mapData;?>
и назначьте его переменной в вашем javascript-коде и используйте ее напрямую.
Ответ 3
Просто используйте dataMap как JSON напрямую.
alert(dataMap.countries.AL); //output: 1
Ответ 4
Несмотря на то, что данные ответы действительно работают, вы можете реализовать его по-другому, чтобы ваш код упрощался.
У вас может быть контроллер, который обрабатывает все ваши вызовы api и размещает там все связанные с ним функции.
Если ваш контроллер называется maps
, и вы создаете метод countries
, который извлекается из базы данных и возвращает json со странами, то в вашем JS вы можете сделать:
$.get('maps/countries', function(data){
console.log(data.countries);
//outputs: {"AL":"1","GB":"1","RS":"1","BG":"6","CA":"3","AT":"2","CD":"1"}
};
Подробнее о Контроллеры CI