在 cakephp 2.x 中从视图到控制器进行 jquery ajax 调用

问题描述 投票:0回答:1

我正在尝试从视图向控制器发出ajax请求,ajax请求工作正常,但从控制器没有返回任何内容到视图。 我不知道问题出在哪里.. 我正在尝试的是在我的视图一侧显示来自控制器的一些数据,并且有一个选择框。当我从选择框中选择一个城市时,它会调用 ajax 请求,并应在 view.ctp 中显示该特定城市的结果。

           $('#cityid').change(function() {

   $city_id= $('#cityid :selected').val();
   alert($city_id);

    $.ajax({
              url     : "<?php echo Router::url(array('controller' => 'deals', 'action' =>'topdeals'), true); ?>",
              type    : "POST",
              cache   : false,
              data    : {city_id: city_id},
              success : function(data){
              alert(data);

              }
          });

        });

     });

在视图中

            <div id="form">
             <?php echo $this->Form->create('Deal',
             array('action'=>'topdeals','type'=>'post'));?>
              <?php
             echo $this->Form->input('city_id',
        array('label'=>'City','type'=>'select',
       'id'=>'city_id','empty'=>'select City','options' =>$city));
             echo $this->Form->end();
               ?>

            </div>

            <div class="line"></div>


              <?php
          if(!empty($topdealsortbyrank))
             {

              foreach($topdealsortbyrank as $topdealsortbyrank)
                 {?>
         <div class="items">

            <div class="itemslogo" >
             <?php echo $this->Html->image('deal/dealimage/'.$topdealsortbyrank['Deal']['image'],array('width'=>"100px",'height'=>"80px"));?>
            </div><!-- items Logo ends-->


            <div class="itemdetails">
              <b><?php echo $topdealsortbyrank['Advertiser']['name']?></b>
    <p class="red"><?php echo $topdealsortbyrank['Deal']['title']?></p>
                <?php
                     }
                       }?>

在控制器中

           function topdealajax()

    {
        $this->log('Ajax call -----------------');
        if ($this->request->isAjax())
        {
            $this->log('inside if request is ajax -----------------');
          $this->layout = null;
            $this->view = 'topdeals';

           if(!empty($this->request->data)) {
            $this->log('inside if  not empty of params -----------------');
            $data = $this->request->data['city_id'];
            $this->log($data);
            $city_id=$data['city_id'];
            $this->log($city_id);
            $city_id= $this->request->data['city_id'];
       // $this->log($city_id);
       $topDealSortbyRank1=$this->Deal->find('all',     array('conditions'=>array('date_expiry >=' =>date('Y-m-d ') ,
                    'date_expiry <=' => 'date_expiry','Deal.city_id'=>$city_id),'order'=>array('Deal.deal_rank ASC')));
               //$this->log($topDealSortbyRank1);
                $this->set('topdealsortbyrank',$topDealSortbyRank1);
                 $this->render('topdeals');
                }
                     }
                     }
jquery controller cakephp-2.3
1个回答
0
投票
/*IN THE AJAX REQUEST YOU SHOULD HAVE*/
$.ajax({
.....
success: function(data){ $('#MYDIV').html(data);}, //YOU CAN APPEND OR REPLACE THE CONTENT OF A CONTAINER WITH THE RESPONSE
...
});

//in DealsController::topdeals() you should have at the begining
if ($this->request->isAjax()):
        $this->layout = null;
        $this->view = 'view_ajax'; //Other view that doesn't needs layout, only if necessary 
    endif;

/*DO WHATEVER YOU WANT HERE, SEND IT TO THE VIEW, THE VIEW GETS RENDERD AND RETURN AS A RESULT*/
© www.soinside.com 2019 - 2024. All rights reserved.