【问题标题】:using angular js get data from codeigniter controller使用 Angular js 从 codeigniter 控制器获取数据
【发布时间】:2016-09-01 05:47:43
【问题描述】:

我使用带有 Angular js 的 codeigniter。 我创建了一个控制器名称 Car.one 模型名称 car_model。 在汽车控制器中,我创建了一种方法视图(),在该方法中,我从代码文件所在的表中获取数据

汽车控制器

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Car extends CI_Controller {

     public function __construct() {

        parent::__construct();
        $this->load->model('Car_model');
     }

     public function view()
     {
        $data = $this->db->get("cars")->result_array();
        echo json_encode($data);
     }
    }

我想以 json 格式获取数据,因此获取了该数据并回显 json_encode($data);

现在我想在 angualrjs 中检索该数据。

add_car 视图

<!DOCTYPE html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

    </head>
    <body ng-app="myapp" ng-controller="myctrl">
        <form method="post"  ng-submit="add(car_det)">
            Car name : <input type="text" ng-model="car_det.cname" name="name"><br>
            Car Image : <input type="file" custom-on-change="uploadFile" ng-model="car_det.cimage"><br>
            <input type="submit" name="add">
        </form>
        <br>
        <table>
            <tr><td>ID </td><td>Car Name</td><td>Car Image</td></tr>
            <tr ng-repeat="x in otherdata">
                <td>{{x.id}}</td><td>{{x.cname}}</td><td>{{x.cimage}}</td>
            </tr>
        </table>
    </body>
</html>


<script type="text/javascript">
var app = angular.module("myapp",[]);
app.controller("myctrl",function($scope,$http){
$http.get("<?=base_url()?>Car/view").then(function(response){
                $scope.otherdata = response.data;
            });
});
</script>

**

错误:

当我在我的文件中编写此代码时,问题是它以表格格式显示数据,这是正确的,但在页面开始时也会显示额外的 json 数组。

我得到这个输出:

**

我还没有编写任何代码来显示在页面的开头仍然显示...

如何解决这个问题..?

【问题讨论】:

    标签: angularjs json codeigniter codeigniter-2


    【解决方案1】:

    将您的控制器功能更改为:

    public function view()
    {
       $data = $this->db->get("cars")->result_array();
       header('Content-Type: application/json');
       echo json_encode($data);
    }
    

    您正在从控制器发送 json。但如果你不指定它,它会作为默认类型发送,我相信这将是 html,这就是它打印在你的页面上的原因。

    如果你使用更好的是:

    $this->output->set_content_type('application/json');
    $this->output->set_output(json_encode($data));
    

    使用output 是在codeigniter 控制器中处理输出数据的正确方法。

    【讨论】:

    • nop.. 它在输出中显示整个内容和页面
    • 此代码在我的情况下对任何其他解决方案都没有帮助
    • 如果您使用$this-&gt;output-&gt;.. 方式会发生什么?它仍然在您的页面上显示 json 吗?
    • yh json 显示和整页 html 内容和 angular js 内容也显示为文本我可以在这里上传屏幕截图吗
    • 什么是角度内容显示像文本?您是说页面上出现的是 {} 中的变量名称而不是变量的值?
    【解决方案2】:

    如果您的视图页面是 html 页面,那么您必须定义一个全局变量 baseUrl,您需要在其中编写静态 base_url() 值,如下所示

    var baseUrl = 'http://localhost/yourProjectName/';
    

    如果你的页面是php页面,那么定义一个隐藏的输入标签,这个值是base_url();和内部脚本写

    var baseUrl = $('#inputId').val();
    

    然后你的脚本是这样的..

    app.controller("myctrl",function($scope,$http){
        $http.get(baseUrl+'Car/view').then(function(response){
           $scope.otherdata = response.data;
        });         
    });
    

    【讨论】:

    • 问题不在于 baseurl,它的工作正常只是页面 json 数组显示的开始
    • 我认为您从控制器的响应数据不正确。只需从模型返回一个数组并回显 json_decode 数组。
    • 怎么可能?
    • 只写 $data = file_get_contents("php://input");回显$数据;在你的控制器中
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 2019-05-07
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2021-11-11
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多