Yii - Ajax基于下拉选择

时间:2013-07-12 18:40:03

标签: yii yii-components

我试图根据下拉列表中的产品选择显示价格。

查看包含:

<?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。

我做错了什么?有什么指针吗?

3 个答案:

答案 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,它也可以工作。