将CI_Model转换为JSON,然后将Send转换为AJAX

时间:2016-10-23 17:19:13

标签: php json ajax codeigniter model

如何使用json_encode将对象转换为JSON,然后将此JSON作为响应发送给AJAX?

CI_Model:

<?php

class TResponse extends CI_Model
{
    private $status;
    private $topics;

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

内部控制器:

$response = new Model\TResponse ();
$response->status = true;
echo json_encode($response);

AJAX:

$('#myform').on('submit', function (e)
        {
            e.preventDefault(); // prevent page reload
            $.ajax ({
                type : 'POST', // hide URL
                url : 'My_Controller/exec', // form validation file
                data : $('#myform').serialize (),
                dataType: 'json',
                success : function (data)
                {
                    console.log("ok");
                }
                , error: function(xhr, status, error)
                {
                    console.log(status+" "+error+" "+xhr)
                }
            });

问题:

当我执行该代码结果错误时。错误是&#34;错误内部服务器错误[对象对象]&#34;。如何解决我的问题?

2 个答案:

答案 0 :(得分:1)

我不明白你为什么要使用$response = new Model\TResponse();。它不是&#34; codeigniter方式&#34;加载模型。但我认为它必须与问题有关,因为下面的代码对我来说非常适合。

注意我已将两个类属性设为公共。私人财产不会暴露,因此不会被提及&#34;到json_encode()

class TResponse extends CI_Model
{
    public $status = FALSE;
    public $topics = ['php', 'stackoverflow', 'json'];

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

}

在控制器中

$this->load->model('TResponse');
$this->TResponse->status = TRUE;
echo json_encode($this->TResponse);

你的javascript很好。

如果我使用这个

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

这是控制台报告的内容

Object
  status: true
  topics: Array[3]
    0: "php"
    1: "stackoverflow"
    2: "json"
    length: 3

答案 1 :(得分:0)

控制器

    $this->output->set_content_type('application/json');
    $this->output->set_output(json_encode( $response ));
视图中的

$.ajax({
            type: "POST",
            url: "<?php echo base_url('path/to_your_controller/function')?>",
            data: {some_data: val},
            success: function (data) {
                var options = '';
                $.each(data, function (key, value) {
                   // read data , each element of the JSON object
                });
             }
        });