Php Yii cgui自动完成动态源URL。如何?

Php Yii cgui自动完成动态源URL。如何?,php,yii,jquery-ui-autocomplete,Php,Yii,Jquery Ui Autocomplete,情况: 带有“国家”下拉列表、“邮政编码”文本字段、“城市”文本字段的表单 国家下拉列表有两项:比利时和法国(有效值分别为BE和FR) “PostalCode”字段是CJuiAutoComplete字段,根据从国家/地区下拉列表中选择的值,它必须从“BeCity/getBelgianPostalCodes”或“FrCity/getFrenchPostalCodes”获取自动完成数据 这两个操作相互独立,工作完美,它们生成正确的自动完成数据。但是,我无法理解如何根据国家/地区下拉列表的选定值使其动

情况:

带有“国家”下拉列表、“邮政编码”文本字段、“城市”文本字段的表单

国家下拉列表有两项:比利时和法国(有效值分别为BE和FR)

“PostalCode”字段是CJuiAutoComplete字段,根据从国家/地区下拉列表中选择的值,它必须从“BeCity/getBelgianPostalCodes”或“FrCity/getFrenchPostalCodes”获取自动完成数据

这两个操作相互独立,工作完美,它们生成正确的自动完成数据。但是,我无法理解如何根据国家/地区下拉列表的选定值使其动态工作。我尝试将所选国家/地区置于会话状态,并从中动态生成sourceUrl。当我查看生成的html的源代码时,根据所选的国家/地区,生成的sourceUrl是正确的,但我仍然从加载的第一个国家/地区获取值。那么大概是缓存问题还是什么

代码如下:

表格:

BeCity控制员:

    public static function actionSetRequestCountryCode()
        {
            $countryCode = $_POST['CountryCode'];
            Yii::app()->user->setState('RequestCountryCode',$countryCode);
        }

        public static function actionGetPostalCodeAction()
        {
            $countryCode = Yii::app()->user->getState('RequestCountryCode');

            if($countryCode == 'BE')
                return 'BeCity/GetBelgianPostalCodes';
            elseif($countryCode == 'FR')
                return 'FrCity/GetFrenchPostalCodes';
            else
                return '';
        }
public function actionGetBelgianPostalCodes()
        {                     
            $res =array();

            if (isset($_GET['term'])) {
                    // http://www.yiiframework.com/doc/guide/database.dao
                    $qtxt ="SELECT
                            DISTINCT
                            CONCAT(bc.PostalCode, ' - ', bc.NameNL) as label,
                            bc.PostalCode as value,
                            bc.NameNL as city
                            FROM be_city bc
                            WHERE bc.PostalCode LIKE :qterm
                            ORDER BY bc.PostalCode, bc.NameNL ASC";
                    $command =Yii::app()->db->createCommand($qtxt);
                    $command->bindValue(":qterm", $_GET['term'].'%', PDO::PARAM_STR);
                    $res = $command->queryAll();
            }

            echo CJSON::encode($res);
            Yii::app()->end();
        }
public function actionGetFrenchPostalCodes()
        {                     
            $res =array();

            if (isset($_GET['term'])) {
                    // http://www.yiiframework.com/doc/guide/database.dao
                    $qtxt ="SELECT
                            DISTINCT
                            CONCAT(fc.PostalCode, ' - ' , fc.NameFR) AS label,
                            fc.PostalCode as value,
                            fc.NameFR as city
                            FROM fr_city fc
                            WHERE fc.PostalCode LIKE :qterm
                            ORDER BY fc.PostalCode ASC, fc.NameFR ASC";
                    $command =Yii::app()->db->createCommand($qtxt);
                    $command->bindValue(":qterm", $_GET['term'].'%', PDO::PARAM_STR);
                    $res =$command->queryAll();
            }

            echo CJSON::encode($res);
            Yii::app()->end();
        }
城市管制员:

    public static function actionSetRequestCountryCode()
        {
            $countryCode = $_POST['CountryCode'];
            Yii::app()->user->setState('RequestCountryCode',$countryCode);
        }

        public static function actionGetPostalCodeAction()
        {
            $countryCode = Yii::app()->user->getState('RequestCountryCode');

            if($countryCode == 'BE')
                return 'BeCity/GetBelgianPostalCodes';
            elseif($countryCode == 'FR')
                return 'FrCity/GetFrenchPostalCodes';
            else
                return '';
        }
public function actionGetBelgianPostalCodes()
        {                     
            $res =array();

            if (isset($_GET['term'])) {
                    // http://www.yiiframework.com/doc/guide/database.dao
                    $qtxt ="SELECT
                            DISTINCT
                            CONCAT(bc.PostalCode, ' - ', bc.NameNL) as label,
                            bc.PostalCode as value,
                            bc.NameNL as city
                            FROM be_city bc
                            WHERE bc.PostalCode LIKE :qterm
                            ORDER BY bc.PostalCode, bc.NameNL ASC";
                    $command =Yii::app()->db->createCommand($qtxt);
                    $command->bindValue(":qterm", $_GET['term'].'%', PDO::PARAM_STR);
                    $res = $command->queryAll();
            }

            echo CJSON::encode($res);
            Yii::app()->end();
        }
public function actionGetFrenchPostalCodes()
        {                     
            $res =array();

            if (isset($_GET['term'])) {
                    // http://www.yiiframework.com/doc/guide/database.dao
                    $qtxt ="SELECT
                            DISTINCT
                            CONCAT(fc.PostalCode, ' - ' , fc.NameFR) AS label,
                            fc.PostalCode as value,
                            fc.NameFR as city
                            FROM fr_city fc
                            WHERE fc.PostalCode LIKE :qterm
                            ORDER BY fc.PostalCode ASC, fc.NameFR ASC";
                    $command =Yii::app()->db->createCommand($qtxt);
                    $command->bindValue(":qterm", $_GET['term'].'%', PDO::PARAM_STR);
                    $res =$command->queryAll();
            }

            echo CJSON::encode($res);
            Yii::app()->end();
        }
这是使用会话变量的正确方法,还是有更好的方法

那么缓存问题呢


感谢您的帮助

Ok,我们可以通过一个操作(函数)获取country参数,并执行该操作中的所有逻辑,而不是尝试重新路由到两个单独的操作:

表格: