cab*_*ret 14 javascript variables ajax codeigniter
我正在研究CodeIgniter应用程序.
我有一个视图,我们称之为Calendar,其中包含一个JS/jQuery <script>
块.看起来像这样:
$(document).ready(function() {
$("#day_list").fadeIn(600);
// init
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
Run Code Online (Sandbox Code Playgroud)
在另一个视图中,我的页脚,我有另一个脚本块,它应该使用相同的变量(current_month和current_year).但是,它不知道它们的存在.将这些变量从第一个<script>
块传递到另一个块的最快,最简单的方法是什么?由于构建应用程序的方式,我无法将这两个块放在一起.我应该为它写一个函数来获取并返回这些值(我应该怎么做?我是一个新手)还是有更简单的方法?
非常感谢!
JSa*_*ger 15
学习在JavaScript中命名变量是非常重要的.范围很重要,而且很重要.现在因为你正在使用"var"关键字,你的东西将在本地范围内.
这里的其他一些答案说你应该把它们移到全球范围内.这是有效的,除非别的东西无意中覆盖了它们.我非常不同意这种方法,全局范围的变量在JavaScript中是不好的做法.
Namespacing的工作方式如下:
var foo = foo || {} //Use existing foo or create an empty object.
foo.bar = foo.bar || {}
foo.bar.baz = foo.bar.baz || {}
Run Code Online (Sandbox Code Playgroud)
等等
这可能看起来更多的工作,但它也保护你的变量.
您还可以添加一个简单的命名空间函数,该函数可以安全地将所有内容命名为窗口对象.(我从很久以前的某个地方弄过这个,我觉得我修改了一下,但也许没有).
把它放在应用程序的顶部,你可以使用$ .namespace("myapp.mydata")命名空间,然后说myapp.mydata.currentYear = ...
$.namespace = function() {
var a=arguments, o=null, i, j, d;
for (i=0; i<a.length; i=i+1) {
d=a[i].split(".");
o=window;
for (j=0; j<d.length; j=j+1) {
o[d[j]]=o[d[j]] || {};
o=o[d[j]];
}
}
return o;
};
Run Code Online (Sandbox Code Playgroud)
此外,如果你是新手,或想要获得硬核,我建议你阅读Crockford的JavaScript Good Parts.
Bra*_*rad 13
将变量声明为全局变量.只需将它们移出文档就绪功能即可.
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
$(document).ready(function() {
....
});
Run Code Online (Sandbox Code Playgroud)
current_month
而current_year
现在可以从任何脚本块访问.