2014-02-17 131 views
-2

我是Yii的新手。我有一組數組值在一個變量在PHP中。我使用這些元素來適應使用JavaScript的自動完成。我不知道如何將這些數組值傳遞給JavaScript,以便它給我所需的結果。將PHP可變數組傳遞給Javascript

我的控制器動作:

public function actionIndex() 
    { 

      $user = Yii::app()->db->createCommand() 
    ->select('cust_name') 
    ->from('mst_customers') 
    ->queryAll(); 

     $dataProvider=new CActiveDataProvider('model_name'); 

       $this->render('index',array(
      'dataProvider'=>$dataProvider, 


     )); 

    } 

我的觀點:

<!--Content--> 

<div id="content"> 
    <div style="padding: 10px;"> 
     <a href="<?php echo $this->createUrl('/Nimsoft/create');?>" title="Create New Host" class="btn btn-primary circle_ok" style="text-decoration: none;" >Add New Host to Customer</a> 

    <div style="float:right"> 
         <?php 
          echo CHtml::link('Upload Customer CSV', array('/Controller/uploadCustomers'), array(
          'onclick'=>'return hs.htmlExpand(this, { objectType: "iframe", wrapperClassName: "full-size", align: "center" })', 
          'class'=>'btn btn-primary', 
          'id'=>'upload_link', 
          )); 
         ?>       
        </div> 
    </div> 
    <h3><?php echo $title; ?></h3> 


    <div class="innerLR"> 
     <div class="row-fluid"> 
<?php 
echo $user=$_GET['user']; 
$obj=$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 

    //'afterAjaxUpdate'=>'\'changeTRColor()\'', 
    //'itemView'=>'_view', 
    'columns'=>array(

       array(   // display 'create_time' using an expression 
          'name'=>'name', 
              'value'=>'$data->host_name', 
       ), 
       array(
          'name'=>'serviceId', 
          'value'=>'$data->host_serviceid', 
       ), 

       array(
              'name'=>'customer', 
              'value'=>'$data->customers->cust_name', 
       ), 
       array(
            'class'=>'CButtonColumn', 
            'template'=>'{delete}{update}',) 



), 
)); 

?> 

     </div> 

<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Autocomplete - Default functionality</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     $('#Search').keyup(function() { 

$.fn.yiiGridView.update('id of your grid to be updated', { 
     data: $(this).serialize() 
    }); 
}); 
    }); 

    //autocomplete 
    $(function() { 
    var availableTags = [ 
     <?php echo json_encode($user);?> 

     /*"ActionScript", 
     "AppleScript", 
     "Asp", 
     "BASIC", 
     "C", 
     "C++", 
     "Clojure", 
     "COBOL", 
     "ColdFusion", 
     "Erlang", 
     "Fortran", 
     "Groovy", 
     "Haskell", 
     "Java", 
     "JavaScript", 
     "Lisp", 
     "Perl", 
     "PHP", 
     "Python", 
     "Ruby", 
     "Scala", 
     "Scheme"*/ 
    ]; 
    $("#Search").autocomplete({ 
     source: availableTags 
    }); 
    }); 
    </script> 
</head> 
<body> 

<div class="ui-widget"> 
    <label for="Search">Search Customer: </label> 
    <input id="Search"> 
</div> 


</body> 
</html> 

     <div class="separator bottom"></div> 
    </div> 
</div> 
<!-- // Content END --> 
<div class="clearfix"></div> 
<!-- // Sidebar menu & content wrapper END --> 

<div id="footer" class="hidden-print"> 
<?php $this->renderPartial('application.views.layouts._footer_inc'); ?> 
</div> 

請幫我做這件事。提前致謝。

回答

0

你正在通過使用json_encode()來做正確的事情。但是,如果您擁有的已經是一個數組,請不要將其包裝在另一個數組中。取而代之的是:

var availableTags = [ 
    <?php echo json_encode($user);?> 
]; 

只是這樣做:

var availableTags = <?php echo json_encode($user); ?>; 

而且,要知道,你可能已經自己開闢了跨站腳本攻擊,並至少創造一些無效的HTML的風險。無論何時您需要將任意數據放入HTML上下文中,都必須將其轉義。取而代之的是:

<h3><?php echo $title; ?></h3> 

這樣做:

<h3><?php echo htmlspecialchars($title); ?></h3> 

更好的辦法是使用模板引擎。

+0

我做的JavaScript變量的警報(),但它返回一個警告「空」 – user3107044

+0

@ user3107044你有沒有嘗試調試的問題?我不知道你的變量是什麼。 'var_dump($ user)'得到了什麼?我敢打賭這將是'空'或類似的。 – Brad

+0

是的,來自我的控制器的數組值不會傳遞給視圖。這是什麼補救措施,我問這是因爲我是yii的入門者 – user3107044

1

,或者您可以使用Yiis CJSON::encode()

<script> 
    var myVariables = <?php echo CJSON::encode($user); ?>; // forgot to close with semicolon 
</script> 
+0

我做了一個JavaScript變量的alert(),但它返回一個警告「null」 – user3107044

+0

這是因爲你的變量是空的,沒有任何條件的情況下嘗試它,看看它是否仍然是空的,順便說一句'console.log()'更好比alert()更好 – tinybyte