Я относительно новичок в JavaScript и пытаюсь понять, как его правильно использовать.
Если я заключу код JavaScript в анонимную функцию, чтобы избежать создания переменных public, функции внутри JavaScript будут недоступны из HTML-кода, который включает JavaScript.
При первоначальной загрузке страницы JavaScript загружается и выполняется, но при последующих перезагрузках страницы код JavaScript больше не проходит процесс выполнения. В частности, существует вызов ajax с использованием httprequest для получения этого из файла PHP и передачи возвращенных данных функции обратного вызова, которая в на успех обрабатывает данные, если бы я мог вызвать функцию, которая выполняет httprequest из HTML в
<script type = "text/javascript" ></script>
блокировать при каждой загрузке страницы, все будет готово - так как я должен вставить весь код JavaScript в этот блок, чтобы заставить его работать при загрузке страницы, надеясь, что кто-то сможет меня обучить.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, лучше не заключать все в анонимную функцию и просто надеяться, что она будет выполнена. Вы можете назвать функцию и поместить ее имя в обработчик загрузки тега body. Это должно гарантировать, что он будет запускаться каждый раз при загрузке страницы.
Я предлагаю просто выполнить window.onload:
<script type = "text/javascript">
(function() {
var private = "private var";
window.onload = function() {
console.info(private);
}
})();
</script>
Зависит от того, что вы хотите сделать, но чтобы не загрязнять глобальное пространство имен, вы можете прикрепить свой код к элементу, который вам нужен.
например
<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>
Я не уверен, решит ли это вашу проблему или нет, но это единственный способ справиться с этим.
Если вы не используете фреймворк javascript, я настоятельно рекомендую это сделать. Я использую MooTools, но есть много других, которые очень надежны (Prototype, YUI, jQuery и т. д.). К ним относятся методы для присоединения функциональности к событию DomReady. Проблема с:
window.onload = function(){...};
заключается в том, что к этому событию может быть привязана только одна функция (последующие назначения перезапишут эту функцию).
Фреймворки предоставляют для этого более подходящие методы. Например, в MooTools:
window.addEvent('domready', function(){...});
Наконец, есть и другие способы избежать загрязнения глобального пространства имен. Простое использование пространства имен в вашем собственном коде (mySite.foo = function ...) поможет вам избежать любых потенциальных конфликтов.
Еще кое-что. Из вашего комментария я не уверен на 100%, что ваша проблема связана с событием загрузки страницы. Вы говорите, что код должен выполняться, когда возвращается ajax? Пожалуйста, отредактируйте свой вопрос, если это так.
On initially loading the page the js loads and is executed but on subsequent reloads of the page the js code does not go through the execution process again
Я не уверен, что точно понимаю вашу проблему, поскольку JS должен выполняться каждый раз, независимо от того, включает ли это сценарий или встроенный скрипт. Но мне интересно, связана ли ваша проблема как-то с кешированием браузера. Проблемы с кешированием могут возникать по двум разным причинам:
Ваше включение javascript кэшируется, и вы пытаетесь обслуживать динамически сгенерированный или недавно отредактированный javascript из этого включения.
Ваш запрос ajax кэшируется.
У вас должна быть возможность избежать кеширования с помощью установка заголовков ответа на сервере. Кроме того, эта страница описывает другой способ обойти проблемы кеширования из запросов ajax.