Yii Jquery AJAX调用未启动


Yii Jquery AJAX Call not firing

我一直在研究并试图学习实现这一目标的正确方法。我已经完成了以下操作,但我的表单仍然没有更改。是否有任何东西可以查看是否正在进行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调试工具栏,在单击表单上的相应字段时没有看到任何POST调用或任何sql查询。

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

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

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

也就是说,如果你没有隐藏入口脚本(index.php),你将不得不写:

url: 'index.php/controllername/actionname'

而不是:

url: 'controllername/actionname'

最好使用createUrl():

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

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

并将您的countryRate命名为actionCountryRate()

我考虑在启动ajax调用时使用绝对url。试着用这种方式制作你的url,它会解决你的问题。

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

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