0

Iamはcodeigniterビューからjsonデータを返そうとしています。しかし、私のコードは機能していません。私はこのサイトで与えられたすべてのオプションを試しました。しかし、ビューからjsonデータを返すことができませんでした。これはコントローラーコードです。

<?php
class Json extends CI_Controller
{

    function __construct()
    {
        parent::__construct();

    }
    public function index()
    {
        $this->load->model('get_json');
        $data['message']=$this->get_json->get_fruits();

         if ($data!== false)
         {
                    $this->load->view('json',json_encode($data['message']));
        }
    }
}

私のモデル

<?php

    class get_json extends CI_Model
    {
        function __construct()
        {
           parent::__construct();
        }


        function get_fruits()
        {
            $sql = "SELECT * FROM fruit where name='Apple'";
            $query = $this->db->query($sql);
            // Fetch the result array from the result object and return it
            return $query->result();

        }

    }

コードを表示:

<?php
$this->output->set_content_type('application/json');
echo $message;

私のコードがうまくいかなかったところを助けてください。

これは、iamが私のログに記録するものです。

ERROR - 2012-05-11 15:28:40 --> Severity: Notice  --> Undefined variable: message C:\xampp\htdocs\ci\system\core\Loader.php(829) : eval()'d code 3
DEBUG - 2012-05-11 15:28:40 --> File loaded: application/views/json.php
4

1 に答える 1

3

コントローラのindexメソッドを次のように変更します。

public function index()
    {
        $this->load->model('get_json');
        $data['message']= json_encode($this->get_json->get_fruits());

         if ($data!== false)
         {
                    $this->load->view('json',$data);
        }
}

そして、あなたはうまくいくはずです:あなた$this->load->viewは、エンコードされた値ではなく、配列をに渡す必要があります。

編集:補足として、この種のものについては、ビューさえ必要ありません。コントローラから直接結果を返すことができます。

public function index()
    {
        $this->load->model('get_json');
        $message = $this->get_json->get_fruits();

         if ($message !== false)
         {
                    $this->output->set_content_type('application/json');
                    echo json_encode($message);
        }
}

よりクリーンで、すべてを1つの場所に配置し、わずかに効率的です。

于 2012-05-11T14:38:24.077 に答える