在表单中有过滤器。根据按钮的点击,我进行了ajax调用。
$.getJSON('<?php echo $this->Html->url(array('controller'=>'buying', 'action'=>'purchase_orders')); ?>/'+warehouse_id+'/'+status+'/'+start_date+'/'+end_date+'/'+supplier_id,
function(data) {
var table_row = '';
$.each(data, function(key,value){
table_row += '<tr><td class="sl"><input name="checkboxlist" type="checkbox" class="select" value="'+value.PurchaseOrder.id+'"/></td><td class="name"><a href="/snow_white/buying/view_purchase_order/'+value.PurchaseOrder.id+'">'+value.PurchaseOrder.order_no+'</a></td><td class="description">'+value.PurchaseOrder.order_date+'</td><td class="description">'+value.Supplier.company_name+'</td><td class="description">'+value.Warehouse.name+'</td><td class="align-center actions"><a class="btn btn-small edit-po" href="/snow_white/buying/edit_purchase_order/'+value.PurchaseOrder.id+'"><i class="icon-edit"></i></a><a class="btn btn-small delete-po" href="#"><i class="icon-trash"></i></a></td></tr>';
});
$('#table-body').empty(table_row);
$('#table-body').append(table_row);
$('#table-division').show();
});
此AJAX调用将以JSON格式返回行。使用JSON格式我在JQUERY脚本中使用$ .each并迭代以获取HTML表格行并最终将其附加到表格主体。在这种情况下,我需要分页,任何人都可以建议我实现它的方式。
答案 0 :(得分:-1)
更好的解决方案是将整个HTML-Results-Table作为呈现的HTML而不是JSON-Data接收,然后使用AJAX-Pagination。 因此,您需要分离Results-Table和周围的事物(过滤器等)。 我通常把它分成
buying/purchase_orders
)elements/buying/purchase_orders_filter
)我的方法是使用jQuery的AJAX - Function。
$.ajax({
type:'get',
url: $('base').attr('href') + 'buying/purchase_orders/warhouse_id:'+warehouse_id+'/status:'+status ...
success: function(html){
$('#table-division').html(html);
}
});
在您的purchase
- 控制器中的功能中,您尝试通过passedArgs($this->passedArgs['warehouse_id'])
,...来获取参数,并像往常一样设置您的分页。
然后你必须告诉Controller,如果通过AJAX调用该动作,那么该元素将被渲染而不是视图。 RequestHandler
非常方便(在函数末尾添加):
if($this->RequestHandler->isAjax()) {
$this->autoRender = false;
$this->render('/elements/buying/purchase_orders_filter');
}
另外请确保将Filterarguments设置回Element,您将需要它用于分页
$this->set('warehouse_id',$this->passedArgs['warehouse_id']);
$this->set('status',$this->passedArgs['status']);
.
.
在purchase_orders
- 视图中,在table-division
区域内(使用$this->element()
)渲染元素,以确保在启动时有未过滤的列表。
要启用AJAX分页,请添加以下行:
<?php $paginator->options(array(
'update'=>'table-division',
'url' => array(
'controller'=>'buying',
'action'=>'purchase_orders',
'warehouse_id' => $warehouse_id,
.
.
))); ?>
您需要在此处添加filter-arguments,以便在对表进行分页时保持数据过滤。
还有一些事情:
$('base').attr('href')
对您的AJAX请求有帮助,它提供了您网址的第一部分,因此您可以从controller/action/...
开始添加<base href="<?php echo $this->base; ?>" />
到您的网址layouts/default
- 部分<head>
。这很方便。
确保ajax.ctp
目录
<?php echo this->fetch('content'); ?>
(仅包含layouts
)
希望这有帮助!