在cakephp中,Jquery ajax无法使用chrome。

时间:2015-03-03 17:15:33

标签: jquery cakephp cakephp-2.4

我正在使用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事件工作正常,但数据没有发送到方法。

1 个答案:

答案 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');