我对JavaScript比较陌生,并试图了解如何正确使用它。
如果我将JavaScript代码包装在匿名函数中以避免生成变量public
,则JavaScript中的函数不能从包含JavaScript的html中获得。
在最初加载页面时,JavaScript加载并执行,但在后续页面重新加载时,JavaScript代码不会再次执行执行过程。具体来说,使用httprequest
进行ajax调用以从PHP文件中获取该函数并将返回的数据传递给 onsuccess 处理数据的回调函数,如果我可以调用该函数
httprequest
<script type="text/javascript" ></script>
阻止每个页面加载我将全部设置 - 因为它是我必须将整个JavaScript代码注入该块以使其在页面加载时工作,希望有人可以教育我。
答案 0 :(得分:2)
如果你没有使用javascript框架,我强烈建议。我使用MooTools,但还有很多其他非常可靠的(Prototype,YUI,jQuery等)。这些包括将功能附加到DomReady事件的方法。问题:
window.onload = function(){...};
是你只能有一个附加到该事件的功能(后续的任务将覆盖这个功能)。
框架为此提供了更合适的方法。例如,在MooTools中:
window.addEvent('domready', function(){...});
最后,还有其他方法可以避免污染全局命名空间。只需命名自己的代码(mySite.foo = function ...)就可以帮助您避免任何潜在的冲突。
还有一件事。我不是100%肯定你的评论,你所遇到的问题是特定于页面加载事件。你是说在ajax返回时需要执行代码吗?如果是这种情况,请编辑您的问题。
答案 1 :(得分:1)
我建议只做window.onload:
<script type="text/javascript">
(function() {
var private = "private var";
window.onload = function() {
console.log(private);
}
})();
</script>
答案 2 :(得分:1)
在最初加载页面时,js加载并执行,但在后续页面重新加载时,js代码不会再次执行执行过程
我不确定我是否完全理解你的问题,因为JS应该每次执行,无论它是包含还是内联脚本。但我想知道你的问题是否与浏览器缓存有关。缓存问题可能有两个不同的点:
您的javascript包含正在被缓存,并且您正尝试从此包含动态生成或最近编辑的javascript。
您的ajax请求正在缓存中。
您应该能够避免在服务器上setting response headers进行缓存 此外,this page描述了另一种解决ajax请求缓存问题的方法。
答案 3 :(得分:0)
最好不要将所有内容都包装在匿名函数中,只希望它被执行。您可以命名该函数,并将其名称放在body标签的onload处理程序中。这应确保每次加载页面时都会运行它。
答案 4 :(得分:0)
取决于您想要做什么,但为了避免污染全局命名空间,您可以将代码附加到您关心的元素。
e.g。
<div id="special">Hello World!</div>
<script>
(function(){
var foo = document.getElementById('special');
foo.mySpecialMethod = function(otherID, newData){
var bar = document.getElementById(otherID);
bar.innerHTML = newData;
};
//do some ajax... set callback to call "special" method above...
doAJAX(url, 'get', foo.mySpecialMethod);
})();
</script>
我不确定这是否会解决您的问题,但它是解决问题的一种方法。