2014-10-02 76 views
1

我想向/从控制器动作发送/获取变量。我的代码:如何在Yii中使用JSON

视图文件

.... 
<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变量到我的查看文件

谢谢。

+0

你可以给我更多关于json输出应该如何看待的信息吗? – 2014-10-03 15:10:13

+0

感谢您的关注。作为复选框。 – 2014-10-03 16:03:01

+1

对不起。我想我的问题并不清楚。通常我所做的是循环查询结果并按照我想要的方式进行格式化。例如。 $ change = array(); foreach($ sql as $ s){ \t $ change [] = $ s-> maraq; } echo json_encode($ change); – 2014-10-03 16:11:33

回答

0

我不是很确定你想要什么。但是,我想指出一些片段。

鉴于文件

<?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 =“”;