在 cakephp 2.x 中从视图到控制器进行 jquery ajax 调用 [英] Making jquery ajax call from view to controller in cakephp 2.x
问题描述
我正在尝试从视图向控制器发出 ajax 请求,ajax 请求工作正常,但从控制器没有任何内容返回到视图.不知道问题出在哪里..我正在尝试的是在我的视图方面我正在显示来自控制器的一些数据并且有一个选择框.当我从选择框中选择一个城市时,它会调用 ajax 请求,并应在 view.ctp 中显示该特定城市的结果.
$('#cityid').change(function() {$city_id= $('#cityid :selected').val();警报($city_id);$.ajax({url : "<?php echo Router::url(array('controller' => 'deals', 'action' =>'topdeals'), true); ?>",类型:POST",缓存:假,数据:{city_id:city_id},成功:功能(数据){警报(数据);}});});});
在视图中
<?php echo $this->Form->create('Deal',array('action'=>'topdeals','type'=>'post'));?><?phpecho $this->Form->input('city_id',array('label'='City','type'='select','id'='city_id','empty'=>'select City','options' =>$city));echo $this->Form->end();?><div class="line"></div><?phpif(!empty($topdealsortbyrank)){foreach($topdealsortbyrank 作为 $topdealsortbyrank){?><div class="items"><div class="itemslogo" ><?php echo $this->Html->image('deal/dealimage/'.$topdealsortbyrank['Deal']['image'],array('width'=>"100px",'height'=>"80px"));?></div><!-- 项目标志结束--><div class="itemdetails"><b><?php echo $topdealsortbyrank['Advertiser']['name']?></b><p class="red"><?php echo $topdealsortbyrank['Deal']['title']?></p><?php}}?>
在控制器中
函数 topdealajax(){$this->log('Ajax 调用 -----------------');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 the 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');}}}
/*IN THE AJAX REQUEST YOU SHOULD*/$.ajax({.....success: function(data){ $('#MYDIV').html(data);},//您可以使用响应附加或替换容器的内容...});//在 DealsController::topdeals() 你应该在开始如果 ($this->request->isAjax()):$this->layout = null;$this->view = 'view_ajax';//其他不需要布局的视图,只在必要时万一;/*在这里做任何你想做的事,把它发送到视图,视图得到渲染并作为结果返回*/
I Am trying to make an ajax request from the view to controller, ajax requst is working fine, but from controller nothing is returned back to the view. i don't know where is the problem.. what i am trying is in my view side i am displaying some data from the controller and there is one select box. whe i select a city from the select box, it calls the ajax request and should show the result from that particular city in the 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);
}
});
});
});
and in the view
<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
}
}?>
And in the controller
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');
}
}
}
/*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*/
这篇关于在 cakephp 2.x 中从视图到控制器进行 jquery ajax 调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!