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