如何将 JSON 数组从 php 传递给 JS?
How can i pass a JSON array from php to JS?
我正在尝试根据一组结果填充 morris.js 图表。在我的控制器中,我创建了一个结果数组并使用 json_encode 创建一个 json 数组,这是我使用 print_r 的视图中的输出:
{"Positive":7,"Negative":26,"Pending":786,"Contact the Clinic":242,"Misc":2}
我如何将其传递到我的 morris.js 图表以使用此数据作为标签/值对来填充图表?我尝试的所有操作都得到一个空白图表或 "undefined" 变量或 "NaN"。这是我的控制器:
function execute_search()
{
// Retrieve the posted search term.
$search_term = $this->input->post('search');
// Get results count and pass it as json:
$data = $this->search_model->count_res('$p_results_data');
$pos = 0; $neg= 0; $pen = 0; $cont = 0; $misc = 0;
foreach ($data as $item) {
if ($item['result'] === 'Positive') {
$pos++;
} elseif ($item['result'] === 'Negative') {
$neg++;
} elseif ($item['result'] === 'Pending') {
$pen++;
} elseif ($item['result'] === 'Contact the Clinic') {
$cont++;
} else {
$misc++;
}
}
$res = array("Positive"=>$pos, "Negative"=>$neg, "Pending"=>$pen, "Contact the Clinic"=>$cont, "Misc"=>$misc);
$data = json_encode($res);
// Use the model to retrieve results:
$this->data['results'] = $this->search_model->get_results($search_term);
$this->data['chart'] = $data;
$this->data['totals'] = $this->search_model->total_res('$total_res');
// Pass the results to the view.
$this->data['subview'] = ('user/search_results');
$this->load->view('_layout_admin', $this->data);
}
和我的 morris.js:
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: [
$results
],
});
非常感谢任何帮助
假设您的 morris.js
是一个普通的 javascript 文件,默认情况下您不能在那里使用 php:服务器不会解析 .js
文件,因此 php 源代码将出现在您的 javascript.
您需要:
- 将
morris.js
脚本内容放在 javascript 块中的 php 页面中,以便 php 得到解析;
- 从您的
morris.js
脚本发出 ajax 请求,以在单独的请求中从服务器获取数据;
- 将您的服务器设置为解析
.js
个文件,就好像它们是/包含 php.
最后一个只是为了说明你需要什么,我不建议这样做。
在 javascript 中,JSON.parse 是你的朋友,假设你有 JSON 是由 PHP 的 json_encode 函数创建的:
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: [
JSON.parse( $results )
],
});
或可能
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: JSON.parse( $results )
});
但我做事的方式
在视图中:
<input type="hidden" id="chartData" value='<?php echo $chart; ?>' />
在 JS 中(使用 jQuery):
var chartData = $('#chartData').val();
new Morris.Donut({
element: 'donutEg',
data: JSON.parse( chartData )
});
在查看 morris.js 的文档后,我发现这是正确的方法:
// Looking at the docs for morris.js:
// http://jsbin.com/ukaxod/144/embed?js,output
// This is your data, but it's all in one json object
var chartData = JSON.parse( $('#chartData').val() );
// We need to break up that object into parts of the donut
var donutParts = [];
$.each( chartData, function(k,v){
donutParts.push({
label: k,
value: v
});
});
// Now create the donut
Morris.Donut({
element: 'donutEg',
data: donutParts
});
我正在尝试根据一组结果填充 morris.js 图表。在我的控制器中,我创建了一个结果数组并使用 json_encode 创建一个 json 数组,这是我使用 print_r 的视图中的输出:
{"Positive":7,"Negative":26,"Pending":786,"Contact the Clinic":242,"Misc":2}
我如何将其传递到我的 morris.js 图表以使用此数据作为标签/值对来填充图表?我尝试的所有操作都得到一个空白图表或 "undefined" 变量或 "NaN"。这是我的控制器:
function execute_search()
{
// Retrieve the posted search term.
$search_term = $this->input->post('search');
// Get results count and pass it as json:
$data = $this->search_model->count_res('$p_results_data');
$pos = 0; $neg= 0; $pen = 0; $cont = 0; $misc = 0;
foreach ($data as $item) {
if ($item['result'] === 'Positive') {
$pos++;
} elseif ($item['result'] === 'Negative') {
$neg++;
} elseif ($item['result'] === 'Pending') {
$pen++;
} elseif ($item['result'] === 'Contact the Clinic') {
$cont++;
} else {
$misc++;
}
}
$res = array("Positive"=>$pos, "Negative"=>$neg, "Pending"=>$pen, "Contact the Clinic"=>$cont, "Misc"=>$misc);
$data = json_encode($res);
// Use the model to retrieve results:
$this->data['results'] = $this->search_model->get_results($search_term);
$this->data['chart'] = $data;
$this->data['totals'] = $this->search_model->total_res('$total_res');
// Pass the results to the view.
$this->data['subview'] = ('user/search_results');
$this->load->view('_layout_admin', $this->data);
}
和我的 morris.js:
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: [
$results
],
});
非常感谢任何帮助
假设您的 morris.js
是一个普通的 javascript 文件,默认情况下您不能在那里使用 php:服务器不会解析 .js
文件,因此 php 源代码将出现在您的 javascript.
您需要:
- 将
morris.js
脚本内容放在 javascript 块中的 php 页面中,以便 php 得到解析; - 从您的
morris.js
脚本发出 ajax 请求,以在单独的请求中从服务器获取数据; - 将您的服务器设置为解析
.js
个文件,就好像它们是/包含 php.
最后一个只是为了说明你需要什么,我不建议这样做。
在 javascript 中,JSON.parse 是你的朋友,假设你有 JSON 是由 PHP 的 json_encode 函数创建的:
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: [
JSON.parse( $results )
],
});
或可能
$results = "<?php echo $chart ?>";
new Morris.Donut({
element: 'donutEg',
data: JSON.parse( $results )
});
但我做事的方式
在视图中:
<input type="hidden" id="chartData" value='<?php echo $chart; ?>' />
在 JS 中(使用 jQuery):
var chartData = $('#chartData').val();
new Morris.Donut({
element: 'donutEg',
data: JSON.parse( chartData )
});
在查看 morris.js 的文档后,我发现这是正确的方法:
// Looking at the docs for morris.js:
// http://jsbin.com/ukaxod/144/embed?js,output
// This is your data, but it's all in one json object
var chartData = JSON.parse( $('#chartData').val() );
// We need to break up that object into parts of the donut
var donutParts = [];
$.each( chartData, function(k,v){
donutParts.push({
label: k,
value: v
});
});
// Now create the donut
Morris.Donut({
element: 'donutEg',
data: donutParts
});