Как использовать 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"}}

ИЗМЕНИТЬ

$mapData​​p >

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