我现在在视图(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;
}
});
});
答案 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;
}
});
});
这是一种方式......也许不是最好的......但是......如果你想尝试的话。