我想把一个json编码的结果(ManagementController.php
,statisticAction
)放在我的Phalcon项目中的视图文件(stat.phtml
)中的Highchart语法中。最初,在stat.phtml
中我使用:
...
...
series: [{
type: 'pie',
name: 'Browser share',
data: []
}]
}
$.getJSON('data/user_type.php', function(json) {
options.series[0].data = json;
chart = new Highcharts.Chart(options);
});
});
其中CCD_ 5被放置在公用文件夹中。
user_type.php
:
<?php
$con = mysql_connect("localhost","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("mockup_workspace", $con);
$result = mysql_query("SELECT name_type_user, total FROM v_ntype_user where id_admin=1");
$rows = array();
while($r = mysql_fetch_array($result)) {
$row[0] = $r[0];
$row[1] = $r[1];
array_push($rows,$row);
}
print json_encode($rows, JSON_NUMERIC_CHECK);
mysql_close($con);
?>
虽然数据是静态的,但它在我加载时工作。但它仍然使用原生PHP语法,所以我想在Managementcontroller中使用该逻辑。然后我发现$.getJSON
在使用ManagementController(myController/actionController)时仍然需要URL json文件(如data/user_type.php
)。那么,如果我想把它从控制器那里拿出来怎么办?
ManagementController.php
<?php
namespace workspace_mockup_2'Controllers;
use workspace_mockup_2'Models'VnTypeUser as nTypeUser;
use Phalcon'Mvc'Controller;
class ManagementController extends Controller {
...
public function statisticAction() {
$id_admin = $this->session->get('auth');
// User Type
$typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');
$rows = array();
foreach($typeUser as $t) {
$row[0] = $t->name_type_user;
$row[1] = $t->total;
array_push($rows,$row);
}
echo json_encode($rows, JSON_NUMERIC_CHECK);
$this->view->pick("/frontend/user_management_page/stat");
}
我一直在寻找一种方法,比如把这个放在控制器中,
...
$printjson = json_encode($rows, JSON_NUMERIC_CHECK);
$this->view->printjs = $printjson;
并将$printjs
变量替换为stat.phtml
中的$.getJSON('data/user_type.php', ...
,但效果不佳。请帮助:(
谢谢。。
如果您使用的是ajax调用,那么您需要使用echo或print从控制器返回结果。如果没有,则需要在视图中设置变量(包含数据)。
示例:控制器-在视图中设置变量
namespace workspace_mockup_2'Controllers;
use workspace_mockup_2'Models'VnTypeUser as nTypeUser;
use Phalcon'Mvc'Controller;
class ManagementController extends Controller
{
public function statisticsAction()
{
// User Type
$typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');
$rows = array();
while ($r = mysql_fetch_array($typeUser)) {
$row[0] = $r[0];
$row[1] = $r[1];
array_push($rows,$row);
}
$this->view->pick("/frontend/user_management_page/stat");
$this->view->setVar('data', json_encode($rows, JSON_NUMERIC_CHECK));
}
}
查看
options.series[0].data = <?php echo data; ?>;
chart = new Highcharts.Chart(options);
控制器-以AJAX 形式返回数据
namespace workspace_mockup_2'Controllers;
use workspace_mockup_2'Models'VnTypeUser as nTypeUser;
use Phalcon'Mvc'Controller;
class ManagementController extends Controller
{
public function statisticsaction()
{
$this->view->setRenderLevel(PhView::LEVEL_ACTION_VIEW);
$this->response->setContentType('text/json');
// User Type
$typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');
$rows = array();
while ($r = mysql_fetch_array($typeUser)) {
$row[0] = $r[0];
$row[1] = $r[1];
array_push($rows,$row);
}
// This will return raw JSON suitable for AJAX calls
echo json_encode($rows, JSON_NUMERIC_CHECK));
}
}
查看
...
...
series: [{
type: 'pie',
name: 'Browser share',
data: []
}]
}
$.getJSON('management/statistics', function(json) {
options.series[0].data = json;
chart = new Highcharts.Chart(options);
});
});
注意:请删除对mysql_*命令的所有引用,并用PDO或mysqli甚至Phalcon的Model替换它们。mysql_*已被弃用