Функция jQuery Load не загружает файл

Я пытаюсь использовать Jquery для загрузки html-кода в другой html-файл, используя метод Jquery .load().

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

Ответ на ошибку не идентифицирован, что усложняет решение этой проблемы:

Обновленный код: внесены изменения в код по рекомендациям пользователей.

Главная HTML-страница

<script src = "https://code.jquery.com/jquery-3.4.1.min.js"></script>

    <script type = "text/javascript">
        jQuery(document).ready(function(){
            jQuery("#test").load("/menu.html", function(response, status) {

        if (status === 'error') {
            alert("Failed to load menu.html");
        }
        else {
            alert("Success!");
        }    
    });
});
</script> 
</head>

</head>

<body>
    <div id = "test"></div> 
</body>

Загрузка HTML-страницы



                <ul>
                   <li><a href = "index.html">Home</a></li>
                    <li>
                        <a href = "article.html">Article</a>
                        <div class = "uk-navbar-dropdown">
                            <ul class = "uk-nav uk-navbar-dropdown-nav">
                                <li><a href = "article.html">Scrollspy</a></li>
                                <li><a href = "article-narrow.html">Narrow</a></li>
                            </ul>
                        </div>
                    </li>
                    <li><a href = "faq.html">Faq</a></li>
                    <li><a href = "contact.html">Contact</a></li>
                    <li><a href = "components.html">Components</a></li>
                </ul>


Если у кого-то есть какие-либо данные или он столкнулся с подобной ошибкой, пожалуйста, дайте мне знать.

У вас есть несколько элементов с идентификатором «меню»? Кроме того, в вашем html-файле есть неоткрытый <ul>.

Bram Verstraten 25.06.2019 00:41

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

Serhiy 25.06.2019 00:52

Спасибо за вклад, внесенные рекомендуемые изменения, и все еще сталкиваетесь с проблемами. Я обновил свой оригинальный пост.

William Griffiths 25.06.2019 23:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 535
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, что есть несколько областей, которые могут вызывать проблемы — рассмотрите следующие корректировки кода:

Загрузка HTML-страницы

<!-- <div id = "menu"> Remove div with menu id -->

    <ul>    <!-- Add opening ul tag -->
        <li><a href = "index.html">Home</a></li>
        <li>
            <a href = "article.html">Article</a>
            <div class = "uk-navbar-dropdown">
                <ul class = "uk-nav uk-navbar-dropdown-nav">
                    <li><a href = "article.html">Scrollspy</a></li>
                    <li><a href = "article-narrow.html">Narrow</a></li>
                </ul>
            </div>
        </li>
        <li><a href = "faq.html">Faq</a></li>
        <li><a href = "contact.html">Contact</a></li>
        <li><a href = "components.html">Components</a></li>
    </ul>


<!-- </div> Remove extra div -->

Главная HTML-страница

В скрипте на главной HTML-странице рассмотрите возможность расширения обратного вызова load() для отображения ошибки в случае сбоя запроса:

jQuery(document).ready(function(){
    jQuery("#menu").load("menu.html", function(response, status) {
        /* Optional, but consider revising this function to alert on error */
        if (status === 'error') {
            alert("Failed to load menu.html");
        }
        else {
            alert("Success!");
        }    
    });
});

В случае, если во время обратного вызова load() возникает ошибка, вы должны убедиться, что menu.html доступен в указанном (относительном) месте.

В большинстве случаев это можно сделать непосредственно в браузере, перейдя по URL-адресу этого HTML-файла и убедившись, что HTML-ответ соответствует ожидаемому.

Если ваш файл menu.html находится в корневом каталоге вашего сервера (т.е. yourserver.com/menu.html), рассмотрите возможность изменения вашего скрипта для получения menu.htm по абсолютному пути, добавив префикс косой черты /menu.html:

jQuery("#menu").load("/menu.html", function(response, status) {
    ....
});

Обновлять

В качестве альтернативы вы можете рассмотреть этот подход на основе метода ajax():

jQuery(function() {
    jQuery.ajax({
        url: '/menu.html',
        dataType: 'html',
        success: function(data) {
            $('#menu').html(data);
        },
        error: function(xhr, error){
            alert('error. see console for details');
            console.error(error);
        }
    });
});

Обновлять

Кроме того, убедитесь, что контент для вашего веб-сайта/приложения обслуживается с сервера, а не из вашей файловой системы. Есть несколько способов настроить сервер для достижения этой цели. Если вы используете браузер на основе Chrome, то простой способ настроить локальный сервер на вашем компьютере для разработки будет с этим расширением Chrome:

https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb

После установки вы можете настроить расширение для обслуживания контента из каталога на вашем компьютере разработки через локальный сервер. В этот момент вы получите доступ к своему сайту через http://localhost:[SOME_PORT]/, а не через file:///C:/data/. Доступ к вашему веб-сайту через localhost должен решить проблему для вас.

Спасибо, Дакре Денни. Я внес изменения, которые вы рекомендовали, но все еще работает с данными в файле menu.html, который не заполняется. Я могу получить доступ к странице меню с абсолютным путем и обновить код с абсолютным путем, но получаю сообщение «Не удалось загрузить menu.html». Я также обновил jQuery до последней версии.

William Griffiths 25.06.2019 22:32

@WilliamGriffiths очень странно - я только что добавил обновление к своему ответу. Помогает ли такой подход?

Dacre Denny 26.06.2019 00:40

Спасибо за ответ, я думаю, это может быть глобальная политика или что-то в этом роде. Ошибка: доступ к XMLHttpRequest в «file:///C:/data/menu.html» из источника «null» заблокирован политикой CORS: запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome -расширение, https.

William Griffiths 26.06.2019 19:26
stackoverflow.com/questions/20041656/…
William Griffiths 26.06.2019 22:24

Ах да, в общем случае вам нужно обслуживать контент (например, menu.html) с веб-сервера, а не из вашей файловой системы. Я обновлю свой ответ подробностями об этом

Dacre Denny 26.06.2019 23:25

Спасибо за помощь.

William Griffiths 26.06.2019 23:43

@WilliamGriffiths, добро пожаловать - только что опубликовал это обновление :)

Dacre Denny 27.06.2019 00:19

Другие вопросы по теме