我有一个表单,用于实时过滤被投入视图的数据。我刚学会了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..');
}
});
});
答案 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);
}
粗糙和记忆 - 但这应该让你非常接近。