10

マッププラグインを使用してデータをレンダリングしています。データはDBからjsonファイルに送られます-スクリプトはうまく機能します。jsonファイルを作成する代わりに、php出力から直接データを使用することにしました。何らかの理由で、javaScriptは直接のphp入力を受け入れません。codeigniterMVCを使用しています

現在機能しているサンプルコードは次のとおりです。

$.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

(AJAXを使用するのではなく)JSONデータをjavascript変数に直接挿入する場合は、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呼び出しを処理するコントローラーを用意し、そこにすべてのマップ関連関数を配置することができます。

コントローラが呼び出され、データベースからフェッチして国のjsonを返すメソッドmapsを作成したcountries場合、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 に答える