我是一名codeigniter/php网站应用程序开发人员。
我正在尝试在视图加载时以一种方式将JSON对象从控制器传递到视图,以便JavaScript可以访问它。
JSON对象如下所示:
控制器代码如下所示:
视图(some_view)的代码如下所示:
JavaScript(some_script)代码如下所示:
挑战在于JSON对象通过json_encode后被发送为字符串,并且其中包含了字符如{和引号,当我将其分配给一个变量时(some_data = "";)JavaScript不喜欢这样。我尝试使用htmlspecialchars也没有效果。
为了取得进展,我试着做了许多事情,最终在控制器中暂时替换了双引号: $data['some_data'] = str_replace('"', """, $some_data);
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后被发送为字符串,并且其中包含了字符如{和引号,当我将其分配给一个变量时(some_data = "";)JavaScript不喜欢这样。我尝试使用htmlspecialchars也没有效果。
为了取得进展,我试着做了许多事情,最终在控制器中暂时替换了双引号: $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 代码中的双引号替换为单引号: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>