2

我一直在研究并尝试学习完成此任务的正确方法。我已经完成了以下操作,但我的表格仍然没有任何变化。无论如何,看看是否正在进行ajax调用?任何人都可以更正此代码以弄清楚为什么我的表单中的字段没有任何更改。

在我的模型中,我具有以下功能

     public function standardRate($country) 
    { 

    $country_std_rate = Yii::app()->db->createCommand()       
       ->select('AVG(rate_syr_mh)')       
       ->from('packaging_metrics')       
       ->where(array('like', 'country', '%'.$country.'%'))    
       ->queryRow();    

            echo CJSON::encode($country_std_rate);  

    }    

在我的控制器中,我添加了此功能,并将“countryRate”添加到我的所有人的访问控制中

public function countryRate() 
    { 
            $input_country = $_POST['country']; 

            $model = PackagingMetric::model()->standardRate($input_country); 
            echo CJSON::encode($model);  

            Yii::app()->end(); 

            $this->render('countryRate',array( 
                    'model'=>$model, 
            )); 

    }

这是我的表单中的 Jquery 调用

  $('#PackagingMetric_std_rate').live('click',function() 
    {  

 var country =  $('#country').val();  

       $.ajax({  
               type: 'POST',  
               url: 'PackagingMetric/countryRate',  
               data: {country:country},  

                           success: function(data)  
                               {                                                      

                $('#PackagingMetric_std_rate').html(data); 

               } 

                               }); 

             });

但是,我的表单上没有任何值改变,我正在使用 Yii-Debug-toolbar 并且在单击表单上的相应字段时没有看到任何 POST 调用或任何 sql 查询。

4

3 回答 3

2

将控制器中的函数重命名为 actionCountryRate()

当向控制器发出发布请求时,它会使用操作前缀查找操作。

于 2012-07-18T16:19:40.713 回答
1

您的url参数$.ajax(); 错误可能是错误的。

也就是说,如果您没有隐藏入口脚本 ( index.php ),则必须编写:

url: 'index.php/controllername/actionname'

代替:

url: 'controllername/actionname'

最好使用createUrl()

url: '<?php echo $this->createUrl('PackagingMetric/countryRate'); ?>'

(当然,echo上面以及如何在 js 中包含 php 代码将取决于您首先如何包含 js)

并将您的 countryRate 命名为actionCountryRate()

于 2012-07-18T16:18:25.237 回答
0

我考虑在触发 ajax 调用时使用绝对 url。尝试以这种方式制作您的网址,它将解决您的问题。

url: '<?php echo Yii::app()->createAbsoluteUrl('PackagingMetric/countryRate');           ?>',   

并且您的控制器操作名称应为“actionCountryRate”,因为此函数是从 url 命中的,而不是从控制器内部调用的,如果您正在使用访问控制,还要设置其 accessRule,否则该函数将不会执行。

于 2012-07-19T05:29:29.987 回答