Я пытаюсь создать слушатель Javascript для маленькой страницы, которая использует AJAX для загрузки контента на основе привязки в URL. Посмотрев в Интернете, я нашел и изменил скрипт, который использует setInterval()
для этого, и пока он работает нормально. Тем не менее, у меня есть другие элементы jQuery в $(document).ready()
для специальных эффектов для меню и контента. Если я использую setInterval()
, другие jQuery-эффекты не работают. Я нашел способ заставить его работать, включив эффекты jQuery в цикл для setInterval()
примерно так:
$(document).ready(function() {
var pageScripts = function() {
pageEffects();
pageURL();
}
window.setInterval(pageScripts, 500);
});
var currentAnchor = null;
function pageEffects() {
// Popup Menus
$(".bannerMenu").hover(function() {
$(this).find("ul.bannerSubmenu").slideDown(300).show;
}, function() {
$(this).find("ul.bannerSubmenu").slideUp(400);
});
$(".panel").hover(function() {
$(this).find(".panelContent").fadeIn(200);
}, function() {
$(this).find(".panelContent").fadeOut(300);
});
// REL Links Control
$("a[rel='_blank']").click(function() {
this.target = "_blank";
});
$("a[rel='share']").click(function(event) {
var share_url = $(this).attr("href");
window.open(share_url, "Share", "width=768, height=450");
event.preventDefault();
});
}
function pageURL() {
if (currentAnchor != document.location.hash) {
currentAnchor = document.location.hash;
if (!currentAnchor) {
query = "section=home";
} else {
var splits = currentAnchor.substring(1).split("&");
var section = splits[0];
delete splits[0];
var params = splits.join("&");
var query = "section=" + section + params;
}
$.get("loader.php", query, function(data) {
$("#load").fadeIn("fast");
$("#content").fadeOut(100).html(data).fadeIn(500);
$("#load").fadeOut("fast");
});
}
}
Некоторое время это работает нормально, но через несколько минут после загрузки страницы она почти останавливается в IE и Firefox. Я проверил консоль ошибок FF, и она возвращается с ошибкой «Слишком много рекурсий». Chrome, кажется, не заботится, и страница продолжает работать более или менее нормально, несмотря на то, сколько времени она открыта.
Мне кажется, что вызов pageEffects()
вызывает проблему с рекурсией, однако любые попытки вывести его из цикла обрывают их, и они перестают работать, как только setInterval
делает первый цикл .
Любая помощь по этому вопросу будет принята с благодарностью!