【问题标题】:How to use JSON in Yii如何在 Yii 中使用 JSON
【发布时间】:2014-10-02 21:41:09
【问题描述】:

我想向/从控制器操作发送/获取变量。我的代码:

查看文件

....
<button id="radiyo">radio</button>
<script>
$("#radiyo").on("click", function(){
    var $radio = $('input[type=radio][name=siniflerin-siyahisi]:checked').attr('id');
    $.ajax({
        type: 'POST',
        url: '<?=Yii::app()->baseUrl;?>/ideyalar/sech/radio',
        async: false,
        cache: false,
        data: {radio: $radio},
//        datatype: "html",
        success:function(){

            alert($radio);
        }
    });
    $.ajax({
        type: 'GET',
        url: '<?=Yii::app()->baseUrl;?>/ideyalar/sech/radio',
        async: false,
        cache: false,
        datatype: "json",
        data: {change: $sql},
        success: function(data) {
            alert(data.change);
        }
    });
});
</script>
....

控制器操作

public function actionSech ($radio)
{
    $sql = Yii::app()->db->createCommand()
        ->select ('m.maraq')
        ->from ('maraq m')
        ->where ('m.idsinif=:ids', [':ids'=>$radio])
        ->queryAll();
    $gonderilen = CJSON::encode(['change'=>$sql]);
}

我从 Yii 官方网站和其他论坛阅读文章。但我不明白我该怎么做。

请告诉我,如何将$sql 变量发送到我的视图文件

谢谢。

【问题讨论】:

  • 你能给我更多关于 json 输出应该是什么样子的信息吗?
  • 感谢关注。作为复选框。
  • 对不起.. 我想我的问题并不清楚。通常我所做的是,遍历查询结果并按照我想要的方式对其进行格式化。例如。 $change = 数组(); foreach($sql as $s){ $change[] = $s->maraq; } echo json_encode($change);
  • 好的。如果我正确理解这段代码应该写在 controller action 中是吗?以及如何在视图文件中接收SQL query 结果?
  • 是的,这段代码将替换行“$gonderilen = CJSON::encode(['change'=>$sql]);”在您的控制器操作中。首先,为什么要在单击复选框时发出两个 ajax 请求?根据您对这个问题的回答,我可以进一步帮助您

标签: php ajax json yii


【解决方案1】:

我不太确定你想要什么。但是,我想指出一些sn-p。

在视图文件中

<?php
    Yii::app()->clientScript->registerScript("header-info","
        var baseUrl = '".Yii::app()->baseUrl;."';  
    ",CClientScript::POS_HEAD);
?>

<button id="radiyo">radio</button>
<script>
    $("#radiyo").on("click", function(){
    var radioValue = $('input[type=radio][name=siniflerin-siyahisi]:checked').attr('id');
    $.ajax({
        url: baseUrl +'/ideyalar/sech',
        dataType:'json',
        type:'POST',        
        data:{radioValue:radioValue},
        async:false
        }).done(function(data){
         if(data['status'] == 'OK'){
             alert(data['returnValue']);
         }else if(data['status'] == 'ERROR'){
             alert("HERE WE GO ERROR");
         }
     });
   });
</script>

您的控制器操作;

public function actionSech()
{
   //In my point, I never call db layer in controller. Controller should be routing purpose

   If(Yii::app()->request->isAjaxRequest){
      $radioValue = isset($_REQUEST['radioValue']) ? $_REQUEST['radioValue'] : "";
      $returnObj = array();
      if($radioValue !=""){
         $query = "SELECT `maraq` FROM maraq WHERE idsinif='$radionValue'";
         $result = Yii::app()->db->createCommand($query)->queryScalar();
         if($result != "" || $result != null){  //ensure result is correct or not
             $returnObj['returnValue'] = $result;
             $returnObj['status'] = 'OK'; 
         }else{
             $returnObj['status'] = 'ERROR'; 
         } 
      }else{   //if radiovalue is blank string
         $returnObj['status'] = 'ERROR';
      }
      echo json_encode($returnObj);
   }
}

希望对您有所帮助!顺便说一句,JavaScript 变量不能用 $ 初始化。只是 var yourVar="";

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多