2017-03-31 104 views
0

我在尝试从我的控制器传递JSON数组到视图以便能够使用图表js生成图表时出现问题。 我试过从控制器回显JSON并获取必要的值。传递JSON数组通过AJAX查看CodeIgniter

在我的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(); 
    } 
} 

>

+0

你的问题是不明确的,你有什么问题,你想会发生什么。 如果有任何错误,您应该显示它 – Kelvin

回答

0

所有你需要首先检查你的服务工作正常,我可以看到你使用GET方法,所以如果你把链接放在浏览器中,你会看到一个JSON数组,如果你c没有看到问题出在您的后端,那么您需要检查您的PHP代码。

第二,如果你在你的浏览器收到的JSON,那么您就可以使用AJAX请求,

你可以看到结果打印数据导致控制台:

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

对于视结果您需要使用F12来启用控制台,然后重新对页面进行充电并验证是否显示JSON。

0

我认为你必须设置响应类型--JSON来得到一个JSON响应。 通过增加线数据类型: “JSON”

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

您应该使用数据类型:在你的AJAX方法 “JSON”。

例如:

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

       success: function() { 

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