私はcodeigniter/phpWebアプリケーションを構築しています。ビューがロードされたときに、JavaScriptからアクセスできるように、JSONオブジェクトをコントローラーからビューに渡そうとしています。
JSONは次のようになります。
{
"event": {
"id": "1",
"name": "Some name",
"description": "Some description",
"address": "1 Main st."
},
"members": {
"others": [
{
"id": "26",
"name": "Brad Black"
},
{
"id": "27",
"name": "Bill Blue"
}
],
"current": {
"id": "1",
"name": "Jill White"
}
}
}
コントローラコードは次のようになります。
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => $some_data
);
$this->load->view('some_view',$data);
}
ビュー(some_view)コードは次のようになります。
<script src="path/to/scripts/some_script.js" type="text/javascript"></script>
<script type="text/javascript">
some_data = "<?php echo $some_data?>";
</script>
<div class="main">
</div>
javascript(some_script)コードは次のようになります。
var some_data;
$(document).ready(function(){
some_data = $.parseJSON(some_data);
});
課題は、JSONオブジェクトが(json_encodeの後に)文字列として送信されるため、{などの文字が含まれ、その一部として引用符が含まれていることです。これは、JavaScriptがvar(some_data = "")に割り当てるときに気に入らないものです。 ;)。私も使ってみましたが、うまくいきません。
私はうまくいかなかったたくさんのことをやってみました、進歩を遂げるために私は一時的にコントローラーの"を置き換えることになりました$ data ['some_data'] = str_replace('"'、" ""、$ some_data);
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => str_replace('"', """, $some_data);
);
$this->load->view('some_view',$data);
}
そして、javascript内の「backto」を置換しますsome_data = some_data.replace(/ "/ g、'"');
var some_data;
$(document).ready(function(){
event_data = event_data.replace(/"/g, '"');
some_data = $.parseJSON(some_data);
});
これはちょっと醜いです、そして私はより良い解決策を探しています。
どんなポインタでも大歓迎です。
アップデート! 問題は解決しました。余分な引用符が問題を引き起こしているようです。
解決策はmohan.gadeの答えと一致しています:
コントローラ:
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => $some_data;
);
$this->load->view('some_view',$data);
}
意見:
some_data = <?php echo $some_data?>;
</script>