Перезагрузить JavaScript без обновления страницы - PullRequest
0 голосов
/ 15 февраля 2012

Отказ от ответственности: я очень новичок в этом, поэтому, пожалуйста, помните об этом.

Здравствуйте,

Я настраиваю сайт, используя AJAX для загрузки содержимого страницыбез необходимости покидать страницу.У меня есть несколько страниц, которые используют javascript для загрузки информации о списке.

Вот как выглядит установка ссылки:

#home
#list.php?list=$list_id

У меня есть переменная с именем $ list_id, и я использую ее с некоторым javascript для загрузкисписок.Проблема, с которой я сталкиваюсь, заключается в том, что если я загружаю один список (скажем, список с идентификатором 1), затем возвращаюсь и загружаю другой список (скажем, список с идентификатором 2), javascript не перезагружается для учета нового идентификатора списка.

Можно ли в любом случае перезагрузить код javascript, чтобы учесть новую переменную без обновления страницы?

Спасибо!

Ответы [ 6 ]

4 голосов
/ 15 февраля 2012

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

var script = document.createElement("script");
script.type = "text/javascript";
script.src = "somefile.js";
document.getElementsByTagName("head")[0].appendChild(script);

или использовать функцию jQuery.loadScript

1 голос
/ 15 февраля 2012

При вставке HTML в DOM скрипты выполняются. Поэтому, когда вы загружаете HTML через AJAX, вы можете выполнять содержащиеся в нем скрипты.

0 голосов
/ 15 февраля 2012

Как правило, было бы лучше разработать протокол здесь.У вас должна быть одна функция для анализа любых загружаемых списков, одна функция для анализа хэша URL-адреса и одна функция для загрузки новых списков.Вы можете получить хеш URL с помощью location.hash.

Вот простой пример, который предполагает, что список будет иметь определенный формат.Таким образом, он будет основан на протоколе, так как в вашем Javascript его нужно загружать только один раз, и он должен ожидать определенный конкретный формат, который он сможет анализировать без каких-либо дополнительных зависимостей.Было бы хорошо на самом деле требовать зависимости, но как / когда / где все должно быть включено в протокол.

<a class="listLoader" href="#list.php?list=1">List 1</a>
<a class="listLoader" href="#list.php?list=2">List 2</a>
<a class="listLoader" href="#list.php?list=3">List 3</a>

.

$('.listLoader').onclick(function() {
    $.ajax({
        'success': function () {
            //Do what you gotta do with your lists
        },
        'url': location.hash.substring(1)
    });
});
0 голосов
/ 15 февраля 2012

Поскольку вы вообще не разместили код, я делаю дикую догадку.

В этом случае вам не нужно перезагружать код Javascript, но вы можете хранить ваши данные в объекте.

Пожалуйста, покажите нам код JS, чтобы правильно ответить на ваш вопрос.

0 голосов
/ 15 февраля 2012

Вы можете использовать функцию jQuery getScript() для динамического получения (и выполнения) сценариев. Например:

$.getScript("/js/myscript.js");
0 голосов
/ 15 февраля 2012

Не могли бы вы сохранить $ list_id в скрытом поле ввода и затем обновить его после вызова ajax?

, например

  <input type="hidden" id="list-id" value="<?php echo $list_id; ?>" />

  <script>
  //ajax request
  var  $list_id = $('#list-id');
  $.ajax({
  url:'http://www.example.com/page.php',
  data:'list_id=' + $list_id.val(),
  success:function(data){
     //do something

     $list_id.val() = $list_id.val() + 1;
 }
 });

просто быстро соединил это вместе, чтобы дать вам представление, поэтому могут быть некоторые ошибки js

...