如何在Codeigniter中使用Ajax将变量从Controller传递到View?

时间:2016-10-13 01:40:33

标签: javascript php jquery ajax codeigniter

将数据从Controller传递到View时出现问题。

我使用Ajax来执行此操作,您可以在此处查看我的Ajax代码:

$(document).ready(function(){
    $('li.thang').click(function(){
        var id_thang = $(this).attr('value');
        $.ajax({
            url: baseUrl+'/Home/getImage',
            dataType: 'json',
            type: 'POST',
            data: {id_thang: id_thang},
        }).done(function(result) {
            console.log(result.get_list_image_thang);
        })          
    });
});

点击HTML标记id_thang时,我会得到li > thang

Controller / Home.php,我将获得有关此id_thang的数组数据。

function getImage(){
    $id_thang = $this->input->post('id_thang');
    $input = array();
    $input['order'] = array('id','ASC');
    $get_image_thang  = $this->Mmenushoatnao->get_info($id_thang);
    ob_start();
}

所有数据都存储在数组$get_image_thang中。

最后,我不知道如何将此数组传递给View,显示我选择的所有数据。

在View / index.php中,我正在尝试foreach遍历此数组中的所有数据并显示在<html>标记中。像这样:

<?php foreach($get_image_thang AS $item) ?>
    <div class="col-md-4 col-sm-4 col-xs-4">
        <?php echo $item->id; ?>
    </div>
<?php endforeach ?>

注意:View / index.php是演示代码。

问题是我不知道如何将$get_image_thang发送到此视图。

更新1:

我尝试将console.log(result);添加到.done(function(result)事件并收到如下结果:

问题是:我使用row += result[i].id;idnameimage_list等任何属性都未定义。

更新2:

只有两个函数可以在id上获取信息。我在core/MY_MODEL.php中编写了所有代码:

function get_info($id, $field = '')
{
    if (!$id)
    {
        return FALSE;
    }

    $where = array();
    $where[$this->key] = $id;

    return $this->get_info_rule($where, $field);
}

function get_info_rule($where = array(), $field= '')
{
    if($field)
    {
        $this->db->select($field);
    }
    $this->db->where($where);
    $query = $this->db->get($this->table);
    if ($query->num_rows())
    {
        return $query->row();
    }

    return FALSE;
}

在控制器处,我拨打get_info。注意:

Mmenushoatnao是数据库中的模型映射。

更新3:

我只知道在Controller中编写代码以获取click事件后的数据。

但是就像你的提问一样。必须用Ajax代码编写所有代码。

像这样:

function getImage(){
    $id_thang = $this->input->post('id_thang');
    $input = array();
    $input['order'] = array('id','ASC');
    $get_image_thang  = $this->Mmenushoatnao->get_info($id_thang);
    ob_start();
    ?>
    <?php foreach($get_image_thang as $item): ?>
    <?php $image_list = json_decode($item->image_list); ?>
    <?php foreach($image_list as $image): ?>
    <div class="col-md-4 col-sm-4 col-xs-4">
        <img src="<?php echo upload_url() ?>/img/hoatnao/hinhanh/<?php echo $image ?>" alt="Image" class="img-responsive">
    </div>
    <?php endforeach; ?>
    <?php endforeach; ?>

    <?php
    $return  = ob_get_clean();
    $data['result']=$return;
    echo json_encode($data);
}

当然,此代码无效。

因此,我们需要转换为Ajax代码。

3 个答案:

答案 0 :(得分:3)

试试这个

function getImage(){
    $id_thang = $this->input->post('id_thang');
    $input = array();
    $input['order'] = array('id','ASC');
    $get_image_thang  = $this->Mmenushoatnao->get_info($id_thang);
    echo json_encode($get_image_thang);
}

现在在ajax中(假设你从get_info()方法返回对象)

//....
.done(function(result) {
   var row = '';
    for (var i = 0; i < Object.keys(result).length; i++) {
         row +=  result[i].id;
    }
   $('#res').html(row);
 })
在它之前

,在视图页面中提供要显示此结果的任何ID

<div id="res" class="col-md-4 col-sm-4 col-xs-4">

</div>

答案 1 :(得分:1)

从我注意到你没有将你的数据设置为JSON输出我建议你看一下codeigniter guide中的输出类,以及你需要如何解码你控制器中的JSON我将为您提供参考here阅读该链接将使您更好地了解如何解码JSON,例如它需要第二个参数将您的JSON转换为数组。

function getImage(){
    $id_thang = $this->input->post('id_thang');
    $id_thang = json_decode($id_thang); // decode JSON to work with it.
    $input = array();// im guessing this is the array you want to send back as JSON
    $input['order'] = array('id','ASC');
    $get_image_thang  = $this->Mmenushoatnao->get_info($id_thang);
    ob_start();// I have no clue you want to achieve with this function? more info on this would be good.

    $this->output
      ->set_content_type('application/json')
      ->set_output(json_encode(array(YOUR ARRAY HERE)));

}

这应该是你的控制器中的最后一件事,因为它是输出。我还想知道你是否可以分享控制台所说的内容。

我注意到的另一件事是,在通过$ .ajax示例发送数据时,您不会对数据进行字符串化处理;

    $(document).ready(function(){
        $('li.thang').click(function(){
            var id_thang = $(this).val();
            $.ajax({
                url: baseUrl+'/Home/getImage',
                dataType: 'json',
                type: 'POST',
                // this is where you should stringify your JSON
                data: {id_thang: JSON.stringify(id_thang)},
            }).done(function(result) {
                console.log(result.get_list_image_thang);
            })          
        });
    });

我想了解更多关于精确控制器正在做什么以及如何从您使用的模型中返回查询以获得更好的洞察力并进一步帮助您的信息。

答案 2 :(得分:0)

如果您想从远程获取json数据,可以通过

输出结果
echo json_encode($arr);

它将从ajax方法集成到结果变量,然后将其作为数组处理。