У меня проблема со встроенным и включенным Javascript

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

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

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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
558
5

Ответы 5

Возможно, лучше не заключать все в анонимную функцию и просто надеяться, что она будет выполнена. Вы можете назвать функцию и поместить ее имя в обработчик загрузки тега 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 должен выполняться каждый раз, независимо от того, включает ли это сценарий или встроенный скрипт. Но мне интересно, связана ли ваша проблема как-то с кешированием браузера. Проблемы с кешированием могут возникать по двум разным причинам:

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

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

У вас должна быть возможность избежать кеширования с помощью установка заголовков ответа на сервере. Кроме того, эта страница описывает другой способ обойти проблемы кеширования из запросов ajax.

Другие вопросы по теме