【问题标题】:load data by ajax disappeared when validation return error验证返回错误时通过ajax加载数据消失
【发布时间】:2012-12-06 07:41:57
【问题描述】:

我有表单内容名字,姓氏......等。并拖拽下拉列表国家和城市,当国家下拉列表被ajax更改时,我加载了城市,一切都很酷。 我的问题:

1- 点击提交时验证出错,城市值将被替换为空值 如何解决?

2- 如何使用 $form-> 我的意思是 city droppdownlist 。

  • 如果验证没有错误,则表单工作

  • 点击提交后的表单并返回验证错误,例如用户名为空..etc

查看:

        <div class="row">
        <?php echo $form->labelEx($model,'البلد'); ?>
    <?php

    /*
     echo chtml::activeDropDownList($model,'country',$model->getcountry(),array('prompt'=>'اختر بلدك ')   , 
    array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('current/dynamiccities'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#city', //selector to update
//'data'=>'js:javascript statement' 
//leave out the data key to pass all form values through
))

    ); 

    */
    echo CHtml::activedropDownList($model,'country',$model->getcountry(),

    array(
    'prompt'=>'اختر البلد أو المنطقة ',
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('register/dynamiccities'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#city', //selector to update
//'data'=>'js:javascript statement' 
//leave out the data key to pass all form values through
))
    );

   ///

    ////

    ?>


        <?php echo $form->error($model,'country'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model,'المدينة'); ?>
        <?php 

echo CHtml::dropDownList('city','', array());

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

城市负载控制器:

public function actionDynamiccities() /// Call Ajax
{
    $country=intval($_POST['Users']['country']);

    $data=Cities::model()->findAll('country_id=:country_id', 
                  array(':country_id'=>$country));
    $data=CHtml::listData($data,'id','city_name_e');
     echo CHtml::tag('option',
                array('value'=>''),CHtml::encode('Select Your City '),true);

    foreach($data as $value=>$name)
    {
        echo CHtml::tag('option',
                   array('value'=>$value),CHtml::encode($name),true);
    };
}

【问题讨论】:

  • 不要说最糟糕的代码,只是修复或告诉我我的错误..这个剪切知识的平台;)不仅仅是说“我见过的最糟糕的代码”
  • 当我看到这个时,我无法控制自己:)
  • 但我在该代码中找不到任何内容。您可以使用调试器逐步传递您的代码。

标签: php yii


【解决方案1】:

如果你看这条线

echo CHtml::dropDownList('city','', array());

很明显列表是空的,以后要编辑内容也是空的。

我建议使用类似的东西

echo CHtml::dropDownList('city', $model->city, empty($model->country) ? array() : CHtml::listData(Cities::model()->findAllByAttributes(array(' country_id' => $model->country)),'id','city_name_e'));

这里我不知道你应该使用$model-&gt;country还是$model-&gt;country_id,取决于你的型号。

【讨论】:

  • 谢谢jborch,我想你的回答很合乎逻辑,但我有问题吗?如何将它与 dropDownList 一起使用??!提前致谢
  • 你试过echo CHtml::dropDownList('city, $model-&gt;city, empty($model-&gt;country) ? array() : Cities::model()-&gt;findAllByAttributes(array('country_id' =&gt; $model-&gt;country)));吗?
  • 提交后出现此错误 Cities 类对象无法转换为字符串im30.gulfup.com/DEfI1.png
  • 我试过但没有返回任何东西,你在评论中的代码对我来说似乎更好,你可以编辑它以使用“dropDownList”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2017-09-05
相关资源
最近更新 更多