Подтвердить что ты не робот

Почему jQuery "перезагружает" себя (через Ajax) после того, как я включил его сам?

Я вижу странное поведение на веб-странице... Я включил jQuery (и jQuery UI), используя обычные теги script. Когда загружается страница, я вижу, что файл загружен (из кеша локального браузера, так как в файле есть далеко идущие заголовки Expires).

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

Снимок экрана с вкладки сети Chrome:

jQuery loading itself... ?

Это очень странно... что здесь происходит?

UPDATE: Код, запускающий это поведение, следующий:

   $(window).load(function() {
     $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
   });

Если я заменил его на это, "двойная загрузка" исчезнет:

   $(window).load(function() {
       $("#t20ContentRightWrapper").toggle("fade", 400);
   });

Итак, в основном, когда я использую анимацию "слайд", jQuery и jQuery UI получают перезагрузку с дополнительными сетевыми запросами, в то время как использование анимации "Fade" не работает.

Я хочу использовать анимацию "слайд", поэтому мне нужно знать, что происходит здесь...!

ОБНОВЛЕНИЕ 2: Вот скриншот, показывающий стек вызовов при наведении указателя мыши на "Инициатор" script в Chrome:

Detail

4b9b3361

Ответ 1

Вы также можете попробовать

$(function() {
   $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
});

Ответ 2

Вы проверили содержимое обратного вызова? Я знаю, это звучит очевидно, но вы уверены, что библиотека jquery не содержится в html, возвращаемом из обратного вызова ajax. Это была бы самая вероятная причина для его загрузки дважды. Проверьте ответ обратного вызова и посмотрите, загружается ли он оттуда.

Ответ 3

Трудно сказать без полного кода страницы, я предполагаю, что код jQuery включен внутри перегруженного контейнера

Ответ 4

попробовал использовать slideToggle(), может быть, что-то вроде:

 $(window).load(function() {
     $("#t20ContentRightWrapper").slideToggle();
   });

По умолчанию эффект движения слайда по умолчанию равен 400

Ответ 5

Документация jQuery содержит следующее предупреждение для метода . load() -

Модуль Ajax также имеет метод с именем .load(). Какой из них уволен зависит от множества переданных аргументов.

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

$(window).on("load", function(){
    $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
});

Ответ 6

Вы пытались заменить содержимое # t20ContentRightWrapper простым абзацем? Если это исправлено, вы можете вынуть часть содержимого, чтобы найти бит-бит. Возможно, у вас есть два элемента с одинаковым идентификатором. Вы также можете попробовать переустановить и заменить файл jquery.js. Вы все равно можете получить 1.7.1 от github. Но я бы попробовал и текущую версию, и сохранил ее, если она не сломает материал, если бы я был вами.

Если проблема не исчезнет, ​​было бы полезно, если бы вы могли сказать, какие браузеры/ОС и версии могут это воспроизвести?

Ответ 7

Функция загрузки означает нечто иное, чем я думаю, что вы ожидаете:

Этот метод является самым простым способом получения данных с сервера. Это примерно эквивалентно $.get(url, data, success), за исключением того, что это скорее метод, чем глобальная функция, и он имеет неявную функцию обратного вызова. Когда обнаружен успешный ответ (т.е. Когда textStatus является "успехом" или "не изменен" ),.load() устанавливает содержимое HTML сопоставленного элемента в возвращаемые данные. Это означает, что большинство применений метода может быть довольно простым:

возможно, вы хотите использовать это вместо:

`

$(function() {
     $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
   });

`