我对内联和包含的Javascript有一个问题

我对内联和包含的Javascript有一个问题,javascript,Javascript,我对JavaScript比较陌生,正在努力理解如何正确使用它 如果我在匿名函数中包装JavaScript代码以避免将变量公开,则JavaScript中的函数在包含JavaScript的html中不可用 在最初加载页面时,JavaScript会加载并执行,但在随后重新加载页面时,JavaScript代码不会再次经历执行过程。具体来说,有一个ajax调用,它使用httprequest从PHP文件中获取数据,并将返回的数据传递给回调函数,该回调函数在onsuccess中处理数据,如果我可以在 <

我对JavaScript比较陌生,正在努力理解如何正确使用它

如果我在匿名函数中包装JavaScript代码以避免将变量
公开
,则JavaScript中的函数在包含JavaScript的html中不可用

在最初加载页面时,JavaScript会加载并执行,但在随后重新加载页面时,JavaScript代码不会再次经历执行过程。具体来说,有一个ajax调用,它使用
httprequest
从PHP文件中获取数据,并将返回的数据传递给回调函数,该回调函数在onsuccess中处理数据,如果我可以在

<script type="text/javascript" ></script>


在每次页面加载时,我都会设置块-实际上,我必须将整个JavaScript代码注入该块,以使其在页面加载时工作,希望有人能教我。

最好不要将所有内容都封装在匿名函数中,只希望它被执行。您可以命名函数,并将其名称放入body标记的onload处理程序中。这应该确保每次加载页面时都会运行它。

最好不要将所有内容都封装在匿名函数中,而只希望执行它。您可以命名函数,并将其名称放入body标记的onload处理程序中。这应该确保每次加载页面时都会运行它。

我建议只执行window.onload:

<script type="text/javascript">
(function() {
    var private = "private var";
    window.onload = function() {
        console.log(private);
    }
})();
</script>

(功能(){
var private=“private var”;
window.onload=函数(){
console.log(私有);
}
})();

我建议只做window.onload:

<script type="text/javascript">
(function() {
    var private = "private var";
    window.onload = function() {
        console.log(private);
    }
})();
</script>

(功能(){
var private=“private var”;
window.onload=函数(){
console.log(私有);
}
})();

取决于您想做什么,但是为了避免污染全局名称空间,您可以将代码附加到您关心的元素上

e、 g

你好,世界!
(功能(){
var foo=document.getElementById('special');
foo.mySpecialMethod=函数(otherID,newData){
var bar=document.getElementById(otherID);
bar.innerHTML=newData;
};
//做一些ajax…设置回调调用上面的“特殊”方法。。。
doAJAX(url'get',foo.mySpecialMethod);
})();

我不确定这是否能解决您的问题,但这是解决问题的一种方法。

取决于您想做什么,但为了避免污染全局命名空间,您可以将代码附加到您关心的元素上

e、 g

你好,世界!
(功能(){
var foo=document.getElementById('special');
foo.mySpecialMethod=函数(otherID,newData){
var bar=document.getElementById(otherID);
bar.innerHTML=newData;
};
//做一些ajax…设置回调调用上面的“特殊”方法。。。
doAJAX(url'get',foo.mySpecialMethod);
})();

我不确定这是否能解决您的问题,但这是解决问题的一种方法。

如果您不使用javascript框架,我强烈建议您这样做。我使用MooTools,但还有许多其他工具非常可靠(Prototype、YUI、jQuery等)。这些方法包括将功能附加到DomReady事件的方法。问题在于:

window.onload = function(){...};
您只能将一个函数附加到该事件(后续分配将覆盖此函数)

框架为此提供了更合适的方法。例如,在MooTools中:

window.addEvent('domready', function(){...});
最后,还有其他方法可以避免污染全局名称空间。只需给自己的代码命名(mySite.foo=function…)就可以帮助您避免任何潜在的冲突


还有一件事。从您的评论中,我不能100%确定您遇到的问题是否与页面加载事件有关。你是说当ajax返回时需要执行代码吗?如果是这种情况,请编辑您的问题。

如果您没有使用javascript框架,我强烈建议您这样做。我使用MooTools,但还有许多其他工具非常可靠(Prototype、YUI、jQuery等)。这些方法包括将功能附加到DomReady事件的方法。问题在于:

window.onload = function(){...};
您只能将一个函数附加到该事件(后续分配将覆盖此函数)

框架为此提供了更合适的方法。例如,在MooTools中:

window.addEvent('domready', function(){...});
最后,还有其他方法可以避免污染全局名称空间。只需给自己的代码命名(mySite.foo=function…)就可以帮助您避免任何潜在的冲突

还有一件事。从您的评论中,我不能100%确定您遇到的问题是否与页面加载事件有关。你是说当ajax返回时需要执行代码吗?如果是这种情况,请编辑您的问题

在最初加载页面时,js加载并执行,但在随后重新加载页面时,js代码不会再次经历执行过程

我不确定我是否完全理解您的问题,因为JS应该每次都执行,不管它是包含脚本还是内联脚本。但我想知道你的问题是否与浏览器缓存有关。可能存在两个不同的缓存问题:

  • 您的javascript包含正在被缓存,并且您正试图提供从该包含动态生成或最近编辑的javascript

  • 正在缓存您的ajax请求

  • 您应该能够避免在服务器上进行缓存。
    此外,还介绍了另一种解决ajax请求缓存问题的方法

    在最初加载页面时,js加载并执行,但在随后重新加载页面时,js代码不会再次经历执行过程

    我不确定我是否完全理解您的问题,因为JS应该每次都执行,不管它是包含脚本还是内联脚本。但我想知道你的问题