Я пытаюсь использовать 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>
Если у кого-то есть какие-либо данные или он столкнулся с подобной ошибкой, пожалуйста, дайте мне знать.
попробовал ваш код с последней стабильной ссылкой jquery CDN - у меня это сработало. Подумайте о том, чтобы изменить его, если чужие советы не помогут.
Спасибо за вклад, внесенные рекомендуемые изменения, и все еще сталкиваетесь с проблемами. Я обновил свой оригинальный пост.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, что есть несколько областей, которые могут вызывать проблемы — рассмотрите следующие корректировки кода:
Загрузка 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 до последней версии.
@WilliamGriffiths очень странно - я только что добавил обновление к своему ответу. Помогает ли такой подход?
Спасибо за ответ, я думаю, это может быть глобальная политика или что-то в этом роде. Ошибка: доступ к XMLHttpRequest в «file:///C:/data/menu.html» из источника «null» заблокирован политикой CORS: запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome -расширение, https.
Ах да, в общем случае вам нужно обслуживать контент (например, menu.html) с веб-сервера, а не из вашей файловой системы. Я обновлю свой ответ подробностями об этом
Спасибо за помощь.
@WilliamGriffiths, добро пожаловать - только что опубликовал это обновление :)
У вас есть несколько элементов с идентификатором «меню»? Кроме того, в вашем html-файле есть неоткрытый
<ul>.