来自codeigniter控制器的值,以javascript变量的形式查看和显示为数组

时间:2016-03-07 10:49:16

标签: javascript php codeigniter

我有一个带自动填充功能的文本框。我的代码是,

<script>
  $(function() {
    var items = [ 'France', 'Italy', 'Malta', 'England', 
        'Australia', 'Spain', 'Scotland' ];

    function split( val ) {
      return val.split( /,\s*/ );
    }
    function extractLast( term ) {
      return split( term ).pop();
    }

    $( "#skills" )
      .autocomplete({
        minLength: 0,
        source: function( request, response ) {
          response( $.ui.autocomplete.filter(
            items, extractLast( request.term ) ) );
        },
        focus: function() {
          return false;
        },
        select: function( event, ui ) {
          var terms = split( this.value );
          // remove the current input
          terms.pop();
          // add the selected item
          terms.push( ui.item.value );
          // add placeholder to get the comma-and-space at the end
          terms.push( "" );
          this.value = terms.join( ", " );
          return false;
        }
      });
  });
</script>

上面的代码工作正常。现在的问题是,我想显示数据库而不是var items = [ 'France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland' ];的值。我想更改变量item内的值。

我的codeigniter控制器代码是,

$data['skills'] = $this->workdone->getAllSkills();
$this->load->view($page, $data);

我的HTML代码是,

<input type="text" name="skills" id="skills">

我已经尝试了很多。有没有解决方案。

3 个答案:

答案 0 :(得分:1)

最好的方法是将值从Codeigniter传递到AJAX前端。

执行此操作的简便方法是将其打印出来,如:

then

AJAX示例(更好的方式)

你的jQuery将使用$ .get():

subjectId

您的控制器代码将打印JSON:

var items = ["<?=implode('","',$skills)?>"];

答案 1 :(得分:1)

步骤1:创建阵列基于查询的阵列阵列具有数据库中的所有项目...对于EX:$ all_items

第2步:现在你只需要使用foreach循环来存储javascript数组中的php数组值..

<script type="text/javascript" language="javascript">
var all_state = new Array();
<?php foreach($all_items as $k => $v){ ?>
    all_state.push('<?php echo $v; ?>');
<?php } ?>
</script>

步骤3:现在java脚本中的项目数组将包含所有状态!!全部是

答案 2 :(得分:1)

我不认可任何使用数组/字符串函数模拟JavaScript数组/对象的黑客技术。

它不会比使用json_encode()更简单或更稳定。

如果您的控制器看起来像这样:

$data['countries'] = ['France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland'];
                     // these are countries, not skills
$this->load->view($page, $data);

然后,您的视图只需要在执行定制功能之前在script标记内声明客户端变量。

echo '<script>let countries = ' , json_encode($countries) , ';</script>';

这将使一维数组可用于您的客户端脚本,并将以下内容打印到文档中:

<script>let countries = ['France', 'Italy', 'Malta', 'England', 'Australia', 'Spain', 'Scotland'];</script>

json_encode()为什么如此完美?因为它仅在数据类型需要时才使用引号,并且它将自动转义值中的引号。这意味着无论您传递什么值,脚本都不会中断(无论如何在那时都是如此)。

如果要将几条数据传递到客户端,则可以将它们全部作为单个对象声明(包含许多键值对)或you can pass each value separately发送。