从CodeIgniter中的AJAX捕获动态POST数据

时间:2016-06-27 22:30:27

标签: php mysql ajax codeigniter

我有一个表单,用于实时过滤被投入视图的数据。我刚学会了serialize(),据我了解,它接受所有表单数据并将其转换为一个字符串,我可以将其传递到我的ajax函数中的data:字段。

所以我的表单在伪代码中设置如下:

<?php foreach (city that's returned from a distinct select statement): ?>
    <?php echo form_checkbox('city-'.$i++, etc...) ?>

呈现:

<input type="checkbox" id="city-1" name="city-1" class="filter city-filter">
<input type="checkbox" id="city-2" name="city-2" class="filter city-filter">
<input type="checkbox" id="city-3" name="city-3" class="filter city-filter">

目前我的模型有一个函数用于获取这些数据并动态地构建一个sql语句:

public function filter_assocaitions($cities, $class, $types)
{
    $this-db->select()->from('Associations')->where('Deleted', 0);

    if(isset($cities))
    {
        $this->db->where('City', any of the city or cities that get passed from ajax);
    }
}

我对CI和php不够熟悉,无法让我的控制器挂钩以编写正确的选择函数。

因为新记录在我的表格中添加了新的不同城市名称,所以会呈现更多输入。我可以使用序列化来整齐地将所有这些组合在一起传递给ajax,如果是这样,我如何在我的CI模型中使用它来使用数据来动态构建一个带有一堆WHERE子句的SQL语句,这些子句基于每个城市&#39 ;检查?

我还有其他类别的过滤器,例如类,类型,需要包含在同一个SQL语句中。

如果这没有任何意义,我可以用更好的信息更新它。

更新:Ajax代码

$("input.filter").change(function(){
    var data = $("form#refine-associations").serialize();
    $.ajax({
        type: "post",
        url: "<?php echo base_url('association/refine/'.$status) ?>",
        cache: false,
        data: data,
        dataType: "json",
        success: function(response){

        },
        error: function(){
            alert('Error while request..');
        }
    });
});

1 个答案:

答案 0 :(得分:1)

我可能会更改City复选框的名称以将数据作为数组传递,并将城市ID存储为值:

<?php echo form_checkbox('cities[]',$i,etc...) ?>

HTML结果:

<input type="checkbox" id="city-1" name="cities[]" value=1 class="filter city-filter">
<input type="checkbox" id="city-2" name="cities[]" value=2 class="filter city-filter">
<input type="checkbox" id="city-3" name="cities[]" value=3 class="filter city-filter">

然后在你的模型中:

foreach($cities as $city)
{
    $this->db->or_where('City', $city);
}

粗糙和记忆 - 但这应该让你非常接近。