我有内联vs包含Javascript的问题

时间:2008-09-15 23:45:53

标签: javascript

我对JavaScript比较陌生,并试图了解如何正确使用它。

如果我将JavaScript代码包装在匿名函数中以避免生成变量public,则JavaScript中的函数不能从包含JavaScript的html中获得。

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

中html中的httprequest
<script type="text/javascript" ></script>

阻止每个页面加载我将全部设置 - 因为它是我必须将整个JavaScript代码注入该块以使其在页面加载时工作,希望有人可以教育我。

5 个答案:

答案 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应该每次执行,无论它是包含还是内联脚本。但我想知道你的问题是否与浏览器缓存有关。缓存问题可能有两个不同的点:

  1. 您的javascript包含正在被缓存,并且您正尝试从此包含动态生成或最近编辑的javascript。

  2. 您的ajax请求正在缓存中。

  3. 您应该能够避免在服务器上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>

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