我一直在研究并试图学习实现这一目标的正确方法。我已经完成了以下操作,但我的表单仍然没有更改。是否有任何东西可以查看是否正在进行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,否则该函数将不会执行。