0

ドロップダウンからの製品の選択に基づいて価格を表示しようとしています。

ビューには以下が含まれます:

<?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 と here にある提案を見て、それらを試してみましたが、まだ運がありません。

これをビューに追加すると

    <?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')
         )
        );
    ?>

リンクをクリックすると応答が返されますが、値が「10」の別のページが表示されます。私は URLFormat = Path を持っています。

私は何を間違っていますか?ポインタはありますか?

4

3 に答える 3

1

示されているようにこれを試すこともできます

<?php echo CHtml::dropDownList('categories','', 
              $category,
              array('ajax'=>array('type'=>'POST','url'=>CController::createUrl('yourController/GetId'),'update' =>'#data'))
            );?>

yourController アクション

public function actionGetId(){
        echo 10;
    }

そして、div

<div id="data">0.00</div>
于 2013-07-13T04:27:52.260 に答える
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);
}

また、AJAX 要求の応答として JSON オブジェクトを送信することをお勧めします。これにより、実際の構造になります。これに関する優れたブログ投稿は、Yii を使用した Fully ajax websiteです。

于 2013-07-12T21:44:51.020 に答える
0

同じ問題があり、ビューをレンダリングするコントローラーで解決しました。renderPartial を使用している場合は、processOutput() オプションが TRUE に設定されていることを確認してください。そうでない場合、Yii は Javascript をアタッチしません。

renderPartial の代わりに render を使用する場合も機能します。

于 2015-07-27T16:16:12.803 に答える