2008-09-15 1 views
0

Я относительно новичок в JavaScript и пытаюсь понять, как правильно его использовать.У меня проблема с встроенным vs включена Javascript

Если я обертываю код JavaScript в анонимной функции, чтобы избежать создания переменных public, функции в JavaScript недоступны из html, который включает JavaScript.

При первоначальной загрузке страницы загрузка и выполнение JavaScript выполняется, но при последующей перезагрузке страницы код JavaScript еще не проходит процесс выполнения. В частности, существует вызов ajax с использованием httprequest, чтобы получить это из файла PHP и передать возвращаемые данные функции обратного вызова, которая в onsuccess обрабатывает данные, если бы я мог вызвать функцию, которая делает httprequest из html в

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

блок на каждой загрузке страницы Я бы все установил - так как мне нужно вставить весь код JavaScript в этот блок, чтобы заставить его работать на загрузке страницы, надеясь, что кто-то сможет меня обучить.

ответ

0

Возможно, лучше всего не обернуть все в анонимную функцию и просто надеяться, что оно будет выполнено. Вы можете назвать функцию и поместить ее имя в обработчик нагрузки тега body. Это должно гарантировать, что он запускается каждый раз, когда страница загружается.

1

я предлагаю просто делать window.onload:

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

Зависит то, что вы хотите сделать, но, чтобы избежать загрязнения глобального пространства имен, вы можете прикрепить свой код к элементу вам небезразличны.

например.

<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> 

Я не уверен, что это решит вашу проблему или нет, но ее единственный способ справиться с этим.

2

Если вы не используете фреймворк javascript, я настоятельно рекомендую его. Я использую MooTools, но есть много других, которые очень прочные (Prototype, YUI, jQuery и т. Д.). К ним относятся методы привязки функциональности к событию DomReady. Проблема:

window.onload = function(){...}; 

является то, что вы можете только когда-либо иметь одну функцию, прикрепленную к этому событию (последующие задания будут перезаписывать этот).

Рамки предоставляют более подходящие методы для этого. Например, в MooTools:

window.addEvent('domready', function(){...}); 

Наконец, существуют другие способы избежать загрязнения глобального пространства имен. Просто namespacing ваш собственный код (mySite.foo = функция ...) поможет вам избежать возможных конфликтов.

Еще одна вещь. Я не уверен на 100% из вашего комментария, что проблема, которая у вас есть, зависит от события загрузки страницы. Вы говорите, что код должен быть выполнен, когда возвращается ajax? Измените свой вопрос, если это так.

1

На начальном этапе загрузки страницы в JS загружает и выполняется, а на последующих перезагрузок данной страницы код JS не проходит через процесс выполнения снова

Я не уверен, я понимаю вашу проблему в точности, поскольку JS должен выполняться каждый раз, независимо от того, является ли он включенным или встроенным скриптом. Но мне интересно, как ваша проблема каким-то образом связана с кешированием браузера. Там может быть два отдельных точек вопросов кэширования:

  1. Ваши Javascript включают в кэшируются, и вы пытаетесь служить динамически или недавно отредактированный JavaScript из этого включают.

  2. Ваш запрос ajax кэшируется.

Вы должны быть в состоянии избежать кеширования на setting response headers на сервере.
Кроме того, this page описывает другой способ обойти проблемы кэширования из запросов ajax.

Смежные вопросы