我试图根据下拉列表中的产品选择显示价格。
查看包含:
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'plan-form',
'enableAjaxValidation'=>true,
)); ?>
<?php echo $form->dropDownListRow($model, 'plan_id',
$planList, array('id'=>'planid', 'prompt'=>'Select Plan',
'ajax' => array('type'=>'GET',
'url'=> Yii::app()->createUrl('mbr/plan/ajaxGetPrice'),
'update'=>'#price'))); ?>
<div id="price">0.00</div>
<?php $this->endWidget(); ?>
动作:
public function actionAjaxGetPrice()
{
Yii::log("Within AjaxGetPrice");
if (Yii::app()->request->isAjaxRequest)
Yii::log("ajax request");
else
Yii::log("regular request");
//$plan=Plan::model()->findByPk((int) $_GET['plan_id']);
//Yii::log(serializ($plan));
// echo $plan->price;
echo "10";
Yii::app()->end();
}
它没有更新价格。它根本没有称之为行动。我查看了Yiiframework中的建议,并在这里试了一下,但仍然没有运气。
当我将其添加到视图
时 <?php
echo CHtml::ajaxLink(
"Get Price",
Yii::app()->createUrl('mbr/plan/ajaxgetprice'),
array( // ajaxOptions
'type' => 'GET',
'update' => '#price'),
array( //htmlOptions
'href' => Yii::app()->createUrl('mbr/plan/ajaxgetprice')
)
);
?>
当我点击链接时,我得到了回复,但它呈现了一个单独的页面,其值为&#34; 10&#34;。我有URLFormat = Path。
我做错了什么?有什么指针吗?
答案 0 :(得分:1)
你也可以试试这个
<?php echo CHtml::dropDownList('categories','',
$category,
array('ajax'=>array('type'=>'POST','url'=>CController::createUrl('yourController/GetId'),'update' =>'#data'))
);?>
yourController action
public function actionGetId(){
echo 10;
}
和div
<div id="data">0.00</div>
答案 1 :(得分:0)
我不确定如何以Yii方式执行此操作,但以下javascript应该很有用。
$("#yourdropdownidhere").change(function(){
$.ajax({
url: 'your url here', //(dynamically generated by product item)
type: "get",
success: ajaxSuccessHandler
});
});
function ajaxSuccessHandler(obj) {
$('#price').html(obj);
}
我还建议发送一个JSON对象作为AJAX请求的响应,因此它将具有实际结构。关于此问题的一篇很棒的博客文章将是Fully ajax website with Yii
答案 2 :(得分:0)
我遇到了同样的问题并在呈现视图的控制器上解决了它。如果您使用renderPartial确保processOutput()选项设置为TRUE,否则Yii将不会附加任何Javascript。
如果使用render而不是renderPartial,它也可以工作。