传递JSON数组以通过AJAX查看CodeIgniter

时间:2017-03-31 20:05:10

标签: php ajax codeigniter

我在尝试将JSON数组从我的控制器传递到视图时遇到问题,以便能够使用图表js生成图表。 我尝试从控制器回显JSON并获得必要的值。

在我的PHP文件中,有一个ajax调用,它使用控制器中的函数来获取数据。

$.ajax({
    url: "index.php/Sales/topClients",
    method: "GET",
    success: function(data){
        var parsedData = JSON.parse(data);
        console.log(parsedData[0].Name);
        var clientname = [];
        var orqty = [];

        for(var i in parsedData){
            clientname.push(parsedData[i].Name);
            orqty.push(parsedData[i].Quantity);
        }
        var chartdata= {
            labels: clientname,
            datasets:[
                {
                    label: 'Ordered Quantity',
                    backgroundColor: [
                        'rgba(231, 76, 60,0.7)', 
                        'rgba(52, 152, 219,0.7)', 
                        'rgba(46, 204, 113,0.7)', 
                        'rgba(230, 126, 34,0.7)',
                        'rgba(155, 89, 182,0.7)',
                    ],
                    borderColor: [
                        'rgba(231, 76, 60,1.0)', 
                        'rgba(52, 152, 219,1.0)', 
                        'rgba(46, 204, 113,1.0)', 
                        'rgba(230, 126, 34,1.0)',
                        'rgba(155, 89, 182,1.0)',
                    ],
                    borderWidth: 1,
                    data: orqty
                }
            ]               
        };
        Chart.defaults.scale.ticks.beginAtZero=true;
        Chart.defaults.global.title.display= true;

        var ctx= $("#RMCanvas");
        var barGraph= new Chart(ctx,{
            type: 'bar',
            data: chartdata
        });
    },
    error: function(data){
        console.log(data);
    }
});

这是控制器(库存)

public function topGoods(){
    $top5fgsold= $this -> Inventory_Model -> getTopGoods();
    echo json_encode($top5fgsold);
    //$this->load->view("SA_Home-Latest");
}

这是模型:Inventory_Model

<?php date_default_timezone_set('Asia/Manila');

class Sales_Model extends CI_Model {
    public function __construct() {
        $this->load->database();
    }
    public function getTopClients(){    
        $this->db-> select("clients.ClientName, SUM(salesinvoicedetails.orderedQuantity) as q");
        $this->db         -> from("salesinvoicedetails");
        $this->db         -> join ("salesinvoice", "salesinvoicedetails.InvoiceNo = salesinvoice.InvoiceNo");
        $this->db         -> join("clients", "clients.ClientNo = salesinvoice.ClientNo");
        $this->db         -> where("salesinvoice.Status", 2);
        $this->db         -> where("OrderDate >=", " DATE_ADD(NOW(), INTERVAL -30 DAY)");
        $this->db         -> where("OrderDate <= NOW()");
        $this->db         ->group_by("1");
        $this->db         ->order_by("q", "desc");
        $this->db         ->limit(5);

        $topclientresult= $this-> db -> get();
        return $topclientresult-> result_array();
    }
}

&GT;

3 个答案:

答案 0 :(得分:1)

你应该在你的ajax方法中使用dataType:“json”。

例如:

$.ajax({
                url: url
                type: 'GET', 
                dataType: 'json', 

                success: function() {

                    //your code
                },
                error: function() {
                    //your code
                }
            });

答案 1 :(得分:0)

首先,您需要检查您的服务是否正常工作,我可以看到您使用GET方法,因此如果您将链接放在浏览器中,您将看到一个JSON数组,如果您看不到任何内容问题出在你的后端,那么你需要检查你的PHP代码。

其次,如果您在浏览器中收到JSON,那么您可以使用AJAX发出请求,

您可以在控制台中看到结果打印数据结果:

success: function(data){
     console.log(data);

要查看使用F12启用控制台所需的结果,您需要为页面充电并验证是否显示JSON。

答案 2 :(得分:0)

我认为你必须设置响应类型 - json才能获得json响应。 添加行 dataType:“json”

url: "index.php/Sales/topClients",
method: "GET",
dataType:"json"