如何将变量从PHP传递给Javascript

时间:2013-12-16 08:36:00

标签: javascript php codeigniter

我现在在视图(PHP)中有我所有的javascript代码。但我想分开(删除重复的代码)。 我目前正在使用CodeIgniter框架,目前我使用这样的函数:

$(function() {
    $("#serialNumber").autocomplete({
         source: "<?php echo site_url('manage/getSerials'); ?>",
         change: function(event, ui) {
             if (!ui.item) {
                 $(event.target).val("");
             }
         },
         focus: function(event, ui) {
             return false;
         }
    });
});

但是你不能在php中使用javascript变量。

那么我应该为每个链接创建一个变量并在我的javascript中使用它,或者在单独的php文件中使用javascript,还是有更好的解决方法?

在ToniTornado的帮助下回答:

首先制作一个这样的函数:

function getURL(link) {
    var site = "<?php echo site_url(); ?>";
    site += "/" + link;
    return site;
}

在您的集合中包含所有jquery,css文件 然后使用像这样的函数(jQuery):

$(function() {
    $("#serialNumber").autocomplete({
         source: getURL('controller/function'),
         change: function(event, ui) {
             if (!ui.item) {
                 $(event.target).val("");
             }
         },
         focus: function(event, ui) {
             return false;
         }
    });
});

2 个答案:

答案 0 :(得分:4)

在我看来,将许多变量从PHP传递到Javascript的最佳方法是在PHP对象中收集它们,将对象转换为JSON并在网站的脚本标记中打印出来。

在您的控制器中:

$config = new stdClass();
$config->site_url = site_url('manage/getSerials');
$config->user_name = 'David';

...以某种方式将$config var传递给您的视图。

在您看来:

<script type="text/javascript">
  var MyConfig = <?= json_encode($config); ?> // global var "MyConfig"
</script>

它将生成此代码:

<script type="text/javascript">
  var MyConfig = {
    site_url: "what/your/function/returned",
    user_name: "David"
  }
</script>

最后在您的Javascript文件中访问您的vars:

console.log(MyConfig.site_url)

全局Javascript var MyConfig还有一个额外的好处,就是将所有动态变量命名为Javascript对象。

答案 1 :(得分:1)

每次为js函数创建链接时,您都可以创建一个php数组并添加一个新项目,如:

$links['refence'] = site_url('manage/getSerials');

* refence = js变量的名称或包含所有链接的js对象的属性名称。

现在在你的所有观点(之前)你可以创建这个:

<script type="text/javascript">
    var refLink = {
        <?php foreach($links as $key => $link): ?>
            <?php echo $key; ?> : <?php echo $link; ?>,
        <?php endif; ?>
    }
</script>

(如果你准备使用这个道具)obj refLink的评估如下:

var refLink = {
     link1 : "yourpath/action",
     link2 : "yourpath/action2",
     link3 : "yourpath/action3",
}

现在你不需要在复杂的JS里面使用php但是只需要在一个js里面。

$(function() {
            $("#serialNumber").autocomplete({
                source: refLink.link3,  //link3 is the key of you php array. 
                change: function(event, ui) {
                    if (!ui.item) {
                        $(event.target).val("");
                    }
                },
                focus: function(event, ui) {
                    return false;
                }
            });
        });

这是一种方式......也许不是最好的......但是......如果你想尝试的话。