У меня проблема с встроенным и включенным Javascript - PullRequest
0 голосов
/ 16 сентября 2008

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

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

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

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

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

Ответы [ 5 ]

2 голосов
/ 16 сентября 2008

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

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

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

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

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

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

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

1 голос
/ 16 сентября 2008

При первоначальной загрузке страницы js загружается и выполняется, но при последующих перезагрузках страницы js-код не проходит процесс выполнения снова

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

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

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

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

1 голос
/ 16 сентября 2008

Я бы предложил просто сделать window.onload:

<script type="text/javascript">
(function() {
    var private = "private var";
    window.onload = function() {
        console.log(private);
    }
})();
</script>
0 голосов
/ 16 сентября 2008

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

, например

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

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

0 голосов
/ 16 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...