我正在使用cakephp 2.4,这里我使用了下面的代码将搜索值发送到searchdue方法中的ReportsContrller。
$('.search').keyup(function(){
var search=$('.search').val();
console.log(search);
$.get("<?php echo Router::url(array('controller'=>'Reports','action'=>'searchdue'));?>",
{'search':search},
function(data){
$('.backsearch').html(data);
}
)
})
然后在searchdue方法中我写了下面的代码
public function searchdue()
{
if(isset($this->request->query['search'])){
$search = $this->request->query['search'];
}
else{
$search = '';
}
$this->Paginator->settings = array(
'conditions' => array('Report.id LIKE' => "$search"),
'limit'=>1
);
$this->set('reports',$this->Paginator->paginate());
}
没有firefox,这段代码不支持其他浏览器。这里Keyup事件工作正常,但数据没有发送到方法。
答案 0 :(得分:0)
在您的控制器操作中,在设置要查看的变量后,您可以添加以下行:
public function searchdue() {
// (...)
$this->set('reports',$this->Paginator->paginate());
$this->layout = null;
$this->autoRender = false;
$content = $this->render();
die($content->body());
}
为了确保所有内容都正确返回,您还可以在json_encode();
完成操作之前使用die();
。
最后两行你可以改成:
// (...)
$content = $this->render()->body();
$result = array('content' => $content);
die(json_encode($result));
然后你还需要改变你的ajax调用:
$.get("<?php echo Router::url(array('controller'=>'Reports','action'=>'searchdue'));?>", {'search':search}, function(data) {
$('.backsearch').html(data.content);
}, 'json');