Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/75: Рейтинг темы: голосов - 75, средняя оценка - 4.72
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150

Ajax динамическая подгрузка данных html на страницу

05.03.2018, 01:31. Показов 15135. Ответов 18

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые пользователи!

Тема довольно избитая, видел много решений данного вопроса, но все-равно, боюсь, что без Вашей помощи я не справлюсь.

Есть активное меню в файле index.html, при нажатии на которое блок div в этом файле должен подгружать содержимое отдельных страниц. Страницы с контентом также в html-формате.

Выбор решения пал на Ajax.

В наличии файлы с контентом:

main.html
directions.html
services.html
about.html

Файл index.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<head>
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js?ver=1.6.4"></script>
    <script type="text/javascript" src='ajax.js'></script>
 
   <style>
      #menu {relative; top:0.5cm; padding-top:1cm; padding-left:13.5cm; font-size:16pt; word-spacing:1.5cm; font-family:Tahoma;}  
      #nav_links {}
      .main {}
      .directions {}
      .services {}
      .about {}
    </style>
 
</head>
 
<body>
   <div id="nav_links">
     <div id="menu">
       <a   class="main"   href="/main.html">  Главная  </a>
       <a   class="directions"   href="/directions.html">  Направления  </a>
       <a   class="services"   href="/services.html">  Продукция  </a>
       <a   class="about"   href="/about.html">  О&nbsp;Предприятии  </a>
     </div>
  </div>
  <!--Подгружаемый контент-->
  <div id="content"></div>
</body>
Файл ajax.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
$('.nav_links a').click(function() {
    var pageName = $(this).attr('class') + '.html';
    
    $.ajax({
        url: pageName,
        cache: false,
        success: function(html){
            $(".content").html(html);
        }
    });
});
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2018, 01:31
Ответы с готовыми решениями:

Динамическая подгрузка данных на страницу
Доброго времени суток. Есть такой вопрос, хочу сделать подгрузку данных в комментариях к примеру на фотографии. Нашёл подходящий готовый...

Динамическая подгрузка контента Ajax
Помогите пожалуйста разобраться. Необходимо на сайте barinel.ru сделать переключение во вкладках &quot;прессы вертикальные&quot;,...

PHP и AJAX. Динамическая подгрузка <select> и <ul>
Всем привет) У меня на сайте есть Оочень большой ненумерованный список складывающийся гармошкой. Как сделать так, чтобы ...

18
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 03:50
19dmitry, вопросик или описание проблемы забыли добавить.
Пока могу сделать два замечания:
1. $('.nav_links a') - селектор указывает на дочерние ссылки родительского элемента с классом "nav_links". В то время, как по коду видим, что это должен быть или элемент с ID = "nav_links" или ID = "menu". Это же замечание относится и к элементу, в который вы собираетесь выводить контент - id="content"
2. var pageName = $(this).attr('class') + '.html'; - не имеет особого смысла, т.к. в атрибуте href у вас уже сформированный путь к файлу.
JavaScript
1
2
3
4
5
6
7
8
9
$('#nav_links a').click(function() {
    $.ajax({
        url: $(this).attr('href'),
        cache: false,
        success: function(html){
            $("#content").html(html);
        }
    });
});
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
05.03.2018, 11:00
Инкрементирую предыдущего комментатора.
Кст возможно стоит использовать не
JavaScript
1
$('#nav_links a')
,а (Ну для экономии на спичках=) Однако отработают одинаково)
JavaScript
1
$('#nav_links').find('a')
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 11:28  [ТС]
Суть вопроса в том, что НЕ РАБОТАЕТ! )

Пробовал, просто подгружать в блок div контент другой html страницы через load, всё получилось, сработало.

А вот смена контента при помощи меню, не выходит.

Учитывая Ваши рекомендации, подкорректировал код, class изменил на id, удалил #nav_links как избыточный, одного "#menu" должно быть достаточно.

Выкладываю исправленный код:

ajax.js
JavaScript
1
2
3
4
5
6
7
8
9
$('#menu a').click(function() {
    $.ajax({
        url: $(this).attr('href'),
        cache: false,
        success: function(html){
            $("#content").html(html);
        }
    });
});
index.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<head>
 
  <style>
      #menu {relative; top:0.5cm; padding-top:1cm; padding-left:13.5cm; font-size:16pt; word-spacing:1.5cm; font-family:Tahoma; font-style:italic;}
      #menu a:link {color:#000000}
      #menu a:visited {font-weight:lighter; color:#000000}
      #menu a:hover {font-weight:bolder; color:#000000}
      #menu a:active {font-weight:bold; color:#000000;}
      #menu a{text-decoration:none;}
      #content {}
  </style>
</head>
 
<body>
  
    <div id="menu">
         <a href="/main.html">Главная</a>
         <a href="/directions.html">Направления</a>
         <a href="/services.html">Продукция</a>
         <a href="/about.html" style="word-spacing:0cm">О&nbsp;Предприятии</a>
    </div>
 
    <div id="content"></div>
</body>
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
05.03.2018, 11:52
Лучший ответ Сообщение было отмечено 19dmitry как решение

Решение

Когда вы указываете
HTML5
1
<a href="/main.html">Главная</a>
Вы по сути реализуете переход с текущей страницы на указанную в href.
Возможно стоит использовать другой атрибут
HTML5
1
<a data_target="/main.html">Главная</a>
и тут
JavaScript
1
2
3
4
5
6
7
8
9
$('#menu a').click(function() {
    $.ajax({
        url: $(this).attr('data_target'),
        cache: false,
        success: function(html){
            $("#content").html(html);
        }
    });
});
2
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 11:59
Цитата Сообщение от 19dmitry Посмотреть сообщение
смена контента при помощи меню, не выходит
Что наблюдаете в консоли? Ошибок, связанных с данным кодом, скорее всего нет, но интересует закладка Network (Сеть). Какой код ответа (статус), приходит ли что-то вообще в ответе на запрос?

Добавлено через 1 минуту
Цитата Сообщение от Корд Посмотреть сообщение
Вы по сути реализуете переход с текущей страницы на указанную в href.
Во!)) Абсолютно верно. Нужно отменять обычное поведение при событии клика на ссылку: event.preventDefault() или return false;

Добавлено через 2 минуты
JavaScript
1
2
3
4
5
6
7
8
9
$('#menu a').click(function(e) {
    e.preventDefault();
    $.ajax( /* ... */ );
});
// или 
$('#menu a').click(function() {
    $.ajax( /* ... */ );
    return false;
});
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 12:54  [ТС]
Пробую уже разные варианты:
1) локально, через openserver
2) через хост Hostiman

Результат один и тот же.

Прикрепляю скрины вкладок Network.

Судя по чистому окну консоли, ответа от сервера нет.
Миниатюры
Ajax динамическая подгрузка данных html на страницу   Ajax динамическая подгрузка данных html на страницу   Ajax динамическая подгрузка данных html на страницу  

0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 13:17
Цитата Сообщение от 19dmitry Посмотреть сообщение
Прикрепляю скрины вкладок Network.
Смотреть нужно XHR-запрос. Т.е. когда выполнили клик на ссылке.
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 13:24  [ТС]
При data_target ссылка не работает, курсор-стрелка меняется на прямую черту. При href отображается следующая ошибка:
Миниатюры
Ajax динамическая подгрузка данных html на страницу  
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 13:26  [ТС]
Хотя не понятно, ведь файл jquery находится там же где и остальные страницы сайта, в папке js. Почему он его ищет по прежнему адресу?
0
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
05.03.2018, 13:32
Цитата Сообщение от 19dmitry Посмотреть сообщение
При data_target ссылка не работает
Код пожалуйста, только что не поленился запустить код - все отработало как надо
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 13:36
Цитата Сообщение от 19dmitry Посмотреть сообщение
следующая ошибка
Вы свой html-файл запускайте не двойным кликом по нему, а на локальном сервере, через адресную строку. Или же, если локального сервера нет, то путь нужно указывать относительный.

Добавлено через 1 минуту
P.S. Попробуйте убрать слеш в начале. Не /directions.html, а просто directions.html
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 13:38  [ТС]
Высылаю код целиком, всё что есть.

ajax.js
JavaScript
1
2
3
4
5
6
7
8
9
10
$('#menu a').click(function() {
    $.ajax({
        url: $(this).attr('data_target'),
        cache: false,
        success: function(html){
            $("#content").html(html);
        }
    });
    return false;
});
index.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
 
<html lang="ru-RU">
  <head>
    <meta charset="UTF-8">
    <title>Наименование сайта</title>
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js?ver=1.6.4"></script>
    <script type="text/javascript" src='ajax.js'></script>
 
    <style>
      #menu {relative; top:0.5cm; padding-top:1cm; padding-left:13.5cm; font-size:16pt; word-spacing:1.5cm; font-family:Tahoma; font-style:italic;}
      #menu a:link {color:#000000}
      #menu a:visited {font-weight:lighter; color:#000000}
      #menu a:hover {font-weight:bolder; color:#000000}
      #menu a:active {font-weight:bold; color:#000000;}
      #menu a{text-decoration:none;}
 
      #logo {position:absolute; padding-left:5cm; top: 0px; padding-top:1cm;}
      #header {position:relative; top: 0.5cm; padding-left:18cm; font-size:11pt; font-family:Microsoft Sans Serif; color:#8e8e8e;}
 
      #footer {position:relative; top:3cm; margin-left:5cm; text-align:left; max-width: 982px; background-color:#fff; font-size:11pt; font-family:Microsoft Sans Serif; color:#8e8e8e;}
      #author {position:absolute; text-align:left; padding-left:17cm; padding-bottom:0.5cm;}
      #contacts {position:absolute; text-align:left; padding-left:0cm; padding-bottom:0.5cm;}
      hr {margin:0; border:none; height: 3px;}
      
      #content {}
 
    </style>
  
 
  </head>
 
  <body>
 
   <p id="header"><i>Разработка, производство, поставка специальных машин и устройств</i></p>
 
 
    <div id="menu">
      <a data_target="/main.html">Главная</a>
      <a href="/directions.html">Направления</a>
      <a href="/services.html">Продукция</a>
      <a href="/about.html" style="word-spacing:0cm">О&nbsp;Предприятии</a>
    </div>
  
    <img id="logo" src="/pictures/logo.jpg" alt="logo"/> 
 
    <div id="content"></div>
 
  </body>
</html>
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 13:40
Цитата Сообщение от 19dmitry Посмотреть сообщение
В наличии файлы с контентом
Кстати, эти все файлы файлы лежат рядом с index.html?

Добавлено через 1 минуту
Цитата Сообщение от 19dmitry Посмотреть сообщение
всё что есть
Это не всё, что есть. Во-вторых, прочитайте дополнение к моему ответу в предыдущем комментарии.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
05.03.2018, 13:43
У вас там кстати jQuery дублируется. Вы подключаете сразу две версии библиотеки. Оставьте только одно следующее объявление:
HTML5
1
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добавлено через 1 минуту
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
$(function() {
  $('#menu a').click(function() {
    $.ajax({
      url: $(this).attr('data_target'),
      cache: false,
      success: function(html){
          $("#content").html(html);
      }
    });
    return false;
  });
});
Так должно работать
2
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 13:45
Лучший ответ Сообщение было отмечено 19dmitry как решение

Решение

Код JS выполнять после загрузки DOM
JavaScript
1
2
3
$(function(){
    // ваш код
});
Убрать подключение "1.6.4/jquery.min.js"
1
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
05.03.2018, 13:53
Все отлично работает. Следите только за путями файлов, которые указываете в data_target.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html>
 
<html lang="ru-RU">
  <head>
    <meta charset="UTF-8">
    <title>Наименование сайта</title>
    <script src="/js/jquery.js"></script>
 
    <style>
      #menu {relative; top:0.5cm; padding-top:1cm; padding-left:13.5cm; font-size:16pt; word-spacing:1.5cm; font-family:Tahoma; font-style:italic;}
      #menu a:link {color:#000000}
      #menu a:visited {font-weight:lighter; color:#000000}
      #menu a:hover {font-weight:bolder; color:#000000}
      #menu a:active {font-weight:bold; color:#000000;}
      #menu a{text-decoration:none;}
 
      #logo {position:absolute; padding-left:5cm; top: 0px; padding-top:1cm;}
      #header {position:relative; top: 0.5cm; padding-left:18cm; font-size:11pt; font-family:Microsoft Sans Serif; color:#8e8e8e;}
 
      #footer {position:relative; top:3cm; margin-left:5cm; text-align:left; max-width: 982px; background-color:#fff; font-size:11pt; font-family:Microsoft Sans Serif; color:#8e8e8e;}
      #author {position:absolute; text-align:left; padding-left:17cm; padding-bottom:0.5cm;}
      #contacts {position:absolute; text-align:left; padding-left:0cm; padding-bottom:0.5cm;}
      hr {margin:0; border:none; height: 3px;}
      
      #content {}
 
    </style>
  
    <script>
    $(document).ready(function(){
        $('#menu a').click(function() {
            $.ajax({
                url: $(this).attr('data_target'),
                cache: false,
                success: function(html){
                    $('#content').html(html);
                }
            });
            return false;
        });
    })
    </script>
  </head>
 
  <body>
 
   <p id="header"><i>Разработка, производство, поставка специальных машин и устройств</i></p>
 
 
    <div id="menu">
      <a data_target="main.php">Главная</a>
      <a data_target="directions.html">Направления</a>
      <a data_target="services.html">Продукция</a>
      <a data_target="about.html" style="word-spacing:0cm">О&nbsp;Предприятии</a>
    </div>
  
    <img id="logo" src="/pictures/logo.jpg" alt="logo"/> 
 
    <div id="content"></div>
 
  </body>
</html>
0
 Аватар для 19dmitry
37 / 37 / 22
Регистрация: 18.01.2014
Сообщений: 150
05.03.2018, 14:01  [ТС]
Спасибо за помощь!

ВСЁ ЗАРАБОТАЛО!

Строка $(function(){ была потеряна, из-за этого и возникла проблема.

href заменена на data_target.

Выкладываю код. Страницы с контентом не привожу, они стандартные html-файлы.

ajax.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
$(function() {
  $('#menu a').click(function() {
    $.ajax({
      url:$(this).attr('data_target'),
      cache: false,
      success: function(html) {
        $("#content").html(html);
      }
    });
    return false;
  });
});
index.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE html>
 
<html lang="ru-RU">
  <head>
    <meta charset="UTF-8">
    <title>Наименование сайта</title>
    
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src='ajax.js'></script>
 
    <style>
      #menu {relative; top:0.5cm; padding-top:1cm; padding-left:13.5cm; font-size:16pt; word-spacing:1.5cm; font-family:Tahoma; font-style:italic;}
      #menu a:link {color:#000000}
      #menu a:visited {font-weight:lighter; color:#000000}
      #menu a:hover {font-weight:bolder; color:#000000}
      #menu a:active {font-weight:bold; color:#000000;}
      #menu a{text-decoration:none;}
 
      #logo {position:absolute; padding-left:5cm; top: 0px; padding-top:1cm;}
      #header {position:relative; top: 0.5cm; padding-left:18cm; font-size:11pt; font-family:Microsoft Sans Serif; color:#8e8e8e;}
      
      #content {}
 
    </style>
  
 
  </head>
 
  <body>
 
   <p id="header"><i>Разработка, производство, поставка специальных машин и устройств</i></p>
 
 
    <div id="menu">
      <a data_target="main.html">Главная</a>
      <a data_target="directions.html">Направления</a>
      <a data_target="services.html">Продукция</a>
      <a data_target="about.html" style="word-spacing:0cm">О&nbsp;Предприятии</a>
    </div>
  
    <img id="logo" src="/pictures/logo.jpg" alt="logo"/> 
 
    <div id="content"></div>
  </body>
</html>
Отвечаю на предыдущие вопросы уже не актуальные (возможно кому-нибудь помогут)
1) Все файлы находятся в одной папке.
2) В локальном сервере запускал через значок openserver на панели задач.

Еще раз. ВСЕМ ОГРОМНОЕ СПАСИБО!!!
Миниатюры
Ajax динамическая подгрузка данных html на страницу  
1
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
05.03.2018, 15:01
Цитата Сообщение от 19dmitry Посмотреть сообщение
href заменена на data_target
Не обязательно. Ссылка могла служить в качестве fallback. И еще, если даже атрибут, то я бы всё-таки использовал data-атрибут. В jQuery доступ к его значению даёт метод data().
HTML5
1
<a data-target="main.html">Главная</a>
JavaScript
1
$('a').data('target'); // main.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2018, 15:01
Помогаю со студенческими работами здесь

AJAX динамическая подгрузка страниц (7стр), сильно скажется на поисковой оптимизации?
Скажите пожалуйста, если сайт большой то понятное дело что да, но если сайт всего из 7 страниц? подгружаются таким способом...

Динамическая подгрузка данных
Добрый день. Такой момент: при создании сущности необходимо в dropdownlist выбрать какое либо значение и в зависимости от выбранного...

Динамическая подгрузка данных по запросу
Здравствуйте дорогие форумчане) Кто подскажет в чём проблема? Есть форма, с выпадающим списком, выбираю пункт из него, нажимаю кнопку...

Динамическая подгрузка данных из MySQL в select
Всем привет, ребят помогите решить проблему. В Базе MySQL имеется три таблицы ( Ребенок, Лагерь, Заявки ). В таблицу Заявки добавляются...

Динамическая подгрузка данных из базы в скрытый div
Помогите, пожалуйста! Имеется список песен по алфавиту, при нажатии на название песни открывается текст песни в модальном окне. Сейчас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru