Yii Jquery AJAX呼叫没有解雇

时间:2012-07-18 16:09:26

标签: php jquery ajax yii call

我一直在研究并尝试学习实现这一目标的正确方法。我做了以下但是,我的表格仍然没有变化。反正有没有看到是否正在进行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查询。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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()

答案 2 :(得分:0)

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

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

并且你的控制器动作名称应该是“actionCountryRate”,因为这个函数是从url命中的,不是从控制器内部调用的,如果你使用访问控制也设置了它的accessRule,否则函数将不会被执行。