最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php - codeigniter JSON - Stack Overflow

programmeradmin1浏览0评论

Hello im using codeigniter and then i echo out my output from the database in my controller and then in my view file i do this:

<script type="text/javascript">
$.getJSON('ajax/forumThreads', function(data) {          
alert(data.overskrift);
});

</script>

but it dont show anything :S

my model file

function forumList()
{
    $this->db->select('overskrift', 'indhold', 'brugernavn', 'dato');
    $this->db->order_by('id', 'desc');
    $forum_list = $this->db->get('forum_traad');

    if($forum_list->num_rows() > 0)
    {
        return $forum_list->result();
    } else {
        return false;
    }
}

my controller

function forumThreads() {

    $this->load->model('ajax_model');
    $data['forum_list'] = $this->ajax_model->forumList();

    if ($data['forum_list'] === true)
    {
        echo json_encode($data['forum_list']);
        $this->load->view('includes/footer', $data); 
    } else {
        return  false;
    }


}

Hello im using codeigniter and then i echo out my output from the database in my controller and then in my view file i do this:

<script type="text/javascript">
$.getJSON('ajax/forumThreads', function(data) {          
alert(data.overskrift);
});

</script>

but it dont show anything :S

my model file

function forumList()
{
    $this->db->select('overskrift', 'indhold', 'brugernavn', 'dato');
    $this->db->order_by('id', 'desc');
    $forum_list = $this->db->get('forum_traad');

    if($forum_list->num_rows() > 0)
    {
        return $forum_list->result();
    } else {
        return false;
    }
}

my controller

function forumThreads() {

    $this->load->model('ajax_model');
    $data['forum_list'] = $this->ajax_model->forumList();

    if ($data['forum_list'] === true)
    {
        echo json_encode($data['forum_list']);
        $this->load->view('includes/footer', $data); 
    } else {
        return  false;
    }


}
Share Improve this question edited Jan 6, 2011 at 17:33 treeface 13.4k4 gold badges52 silver badges57 bronze badges asked Jan 6, 2011 at 16:05 oleole 311 gold badge1 silver badge2 bronze badges 2
  • a good way to test for me has been to just try and visit the controller function "in the wild" just typing it in the browser and see what the output is, just so you know you are getting the output you expect. – jondavidjohn Commented Jan 6, 2011 at 16:17
  • Remove $this->load->view('includes/footer', $data); after the json_encode. JSON data cannot have anything before or after it. – gen_Eric Commented Jan 6, 2011 at 16:19
Add a ment  | 

3 Answers 3

Reset to default 3

$forum_list->result() returns an array of results.

If you only want 1 row, use $forum_list->row(), otherwise in the javascript, you'll need to loop through all the rows.

$.each(data, function(i,v){
  alert(v.overskrift);
});

EDIT: When outputting JSON, do not print anything before or after. You need to remove $this->load->view('includes/footer', $data); after the json_encode. Also, controllers don't return anything.

EDIT 2: Replace if ($data['forum_list'] === true) with if ($data['forum_list'] !== false). The === pares type, and an array is not a boolean.

Model:

function forumList()
{
    $this->db->select('overskrift', 'indhold', 'brugernavn', 'dato');
    $this->db->order_by('id', 'desc');
    $forum_list = $this->db->get('forum_traad');

    if($forum_list->num_rows() > 0)
    {
        return $forum_list->result_array();
    } else {
        return false;
    }
}

Controller:

function forumThreads() {

    $this->load->model('ajax_model');
    $data['forum_list'] = $this->ajax_model->forumList();

    if ($data['forum_list'] !== false) {
        echo json_encode($data['forum_list']);
    }
}

Try this:

//works only with php 5.3
echo json_encode($data['forum_list'], JSON_FORCE_OBJECT);
发布评论

评论列表(0)

  1. 暂无评论