10

我正在使用地图插件来呈现一些数据。数据来自数据库并进入 json 文件 - 脚本运行良好。我决定直接使用来自 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 是

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我存档的字符串和发送到视图的字符串相同。

4

4 回答 4

3

如果您只是要将 JSON 数据直接插入到 javascript 变量中(而不是使用 AJAX),那么您根本不需要getJSON调用。直接这样写对象就好了。

var js_object = <?php echo $mapData; ?>;
alert(js_object.countries.AL);
alert(js_object.countries.GB);

请注意,PHP 字符串不会回显到括起来的引号中,这意味着您正在直接创建一个 javascript 对象文字,而不是需要通过以下方式将其解析为对象的字符串JSON.parse()

于 2012-12-03T19:33:17.050 回答
1

从您更新的代码开始,看起来您根本不需要调用getJSON,因为您已经拥有 json 数据。

只需<? echo $mapData;?>将其分配给您的 javascript 代码中的变量并直接使用它。

于 2012-12-03T19:39:40.910 回答
1

只需直接将 dataMap 用作 JSON 即可。

alert(dataMap.countries.AL); //output: 1
于 2012-12-03T19:41:51.760 回答
1

尽管给定的答案确实有效,但您可能希望以不同的方式实现它,以便您的代码更易于维护。

您可以有一个控制器来处理您的所有 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 控制器

于 2015-08-19T19:05:49.330 回答