【问题标题】:Pass PHP variable array to Javascript [duplicate]将PHP变量数组传递给Javascript [重复]
【发布时间】:2014-02-17 05:05:03
【问题描述】:

我是 Yii 的新手。我在 php 的一个变量中有一组数组值。我使用这些元素来适应使用 JavaScript 的自动完成功能。我不知道如何将这些数组值传递给 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>

请帮我做这件事。提前致谢。

【问题讨论】:

    标签: javascript php yii


    【解决方案1】:

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

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

    【讨论】:

    • 我对 javascript 变量做了一个 alert() 但它返回了一个 alert"null"
    • 那是因为你的变量是空的,不带任何条件试一下,看看是否还是null,顺便说一句console.log()alert()
    【解决方案2】:

    使用json_encode() 是正确的。但是,如果您拥有的已经是一个数组,请不要将其包装在另一个数组中。而不是这个:

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

    这样做:

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

    另外,请注意,您可能已经对 XSS 攻击敞开心扉,并且至少有创建一些无效 HTML 的风险。任何时候您需要将任意数据放入 HTML 的上下文中,您都必须对其进行转义。而不是这个:

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

    这样做:

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

    最好使用模板引擎。

    【讨论】:

    • 我对 javascript 变量做了一个 alert() 但它返回了一个 alert"null"
    • @user3107044 您是否尝试过调试问题?我不知道你的变量中有什么。 var_dump($user) 带给你什么?我敢打赌它会是null 或类似的。
    • 是的,我的控制器中的数组值没有传递给视图。对此有什么补救措施,我问这个,因为我是 yii 的初学者
    • @user3107044 您问的是如何将变量传递给 JavaScript……而不是如何在 Yii 中处理您的用户对象。您应该为此发布一个单独的问题。
    • 你的渲染函数必须是 $this->render('index',array( 'dataProvider'=>$dataProvider, 'user'=>$user ));
    猜你喜欢
    • 2014-01-11
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多