如何将Ajax调用值保存到变量中

StreetCoder

希望你一切都好。我有一个问题,就是我使用扩展名,即select2,它在下拉列表中显示所有产品的名称,并且对我来说很好用。在我的数据库中,每个产品都有单独的价格。因此,我想在下一个下拉列表中显示所有选定产品的价格总和。因此,我使用ajax将产品ID发送给控制器以查找产品价格。不幸的是,我无法对所有产品的价格求和,因为当我添加新产品时,先前的产品ID会发生变化,然后价格也会发生变化。但我想选择产品时保持产品价格的变量。

表单代码:

<div class="row">
    <?php echo $form->labelEx($model,'item_list'); ?>
    <?php
    $data = CHtml::listData(Products::model()->findAll(),'id', 'name');
    echo Select2::activeMultiSelect(
        $model, 'item_list', $data, array(
            'required' => 'required',
            'style' => 'width: 270px;',
            'placeholder' => 'Add Product',
            'select2Options' => array(),
            'ajax' => array('type'=>'POST',
                'url'=>$this->createUrl('totalOrderPrice'), //url to call.
                'update'=>'#price', //selector to update
                'data'=>array('item_list'=>'js:this.value'),
            ),
        )
    );

    ?>
    <?php echo $form->error($model,'item_list'); ?>
</div>

控制器代码:

...

...

public $prices;
...

...     
public function actionTotalOrderPrice(){
    $data = Products::model()->findByPk(array('id'=>$_POST['item_list']));
    $this->prices += $data->prices;
    echo CHtml::tag('input', array( 'type'=>'text' , 'name'=>'Order[price]' , 'value' => $this->prices));
}

我花了很多时间来解决这个问题,但是无论如何都做不到。请帮助某人。

在此先感谢Shimul

萨洪再

由于我没有产品架构,因此我使用了另一个模型,即为User您提供了如何实现的示例。

<div class="row">    
    <?php
    $model=User::model();
    $attribute='products';
    $data =  CHtml::listData(Yii::app()->db->createCommand("select id, concat(RAND()*1000,':',username) as name FROM `User` ")->queryAll(),'id','name');

    echo Select2::activeMultiSelect($model,$attribute, $data,
         array(
            'required' => 'required',
            'style' => 'min-width:200px',           
            'placeholder' => 'Choose User',
            'select2Options'=>array(
                'formatResult'=>'js:format',
                'formatSelection'=>'js:format',
            ),
            'onChange'=>'js:{
                var total=0;
                $($(this).select2("data")).each(function(){
                    total+=this.text.split(":")[0]*1;
                });
                $("#total > label").text(total);
            }',
        )
    );


    $js_format_fun = <<<JS
        function format(opt){
            var price_lbl=opt.text.split(':');              
            return price_lbl[1];
        }
JS;
      Yii::app()->clientScript->registerScript('select2_format_option', $js_format_fun, CClientScript::POS_READY);
    ?>  
</div>
<br/>
<div id="total"><strong>Total Price: </strong><label></label></div>

您将看到这样的东西:

在此处输入图片说明

这样做的目的是避免使用Ajax,并在名称中添加价格,例如,产品名称的格式应为price:name您将价格,名称分开,然后按我上面的方法计算总数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章