【问题标题】:Yii Jquery AJAX Call not firingYii Jquery AJAX 调用未触发
【发布时间】:2012-07-17 17:52:39
【问题描述】:

我一直在研究并尝试学习实现此目的的正确方法。我已经完成了以下操作,但我的表格仍然没有任何变化。无论如何,看看是否正在进行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 查询。

【问题讨论】:

    标签: php jquery ajax yii call


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!没有意识到这是一个严格的 Yii 约定。为了快速响应!
    【解决方案2】:

    $.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()

    【讨论】:

    • 谢谢,但是我收到此错误 未定义属性“PackagingMetricController.createUrl”。这很奇怪,因为我认为这个功能应该从主控制器扩展?
    • 是的,我相信是这样,这一行在我的班级类 PackagingMetricController extends Controller 的顶部
    • 你也可以同时使用Yii::app()-&gt;createUrl()
    • 如果你使用 registerScript,那么不要使用&lt;?php ?&gt;! ,那么您只需使用 url: '".Yii::app()-&gt;createUrl('whatever')."' 。如果您使用registerScript(''," "),即如果您使用双引号来包含您的脚本代码,请使用这种方式。这是字符串连接。
    • 至少发布(网址调用)正在发生吗?即 ajax 调用触发?
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多