Как использовать внешний скрипт при подгрузке с помощью $.ajax?

Есть такой код
<script>
    $(function() {
        var request = $.ajax({
            type: "GET",
            url: "/ajax/photo/get_photos",
            data: { id: 1},
            cache: false,
            dataType: "html",
        });

        request.done(function( msg ) {
            $( "#user_photos" ).html( msg );
        });

    });

</script>


В ответе от /ajax/photo/get_photos приходит, помимо html
<script src="https://cdn.jsdelivr.net/npm/lightgallery@2.0.0-beta.3/lightgallery.umd.js"></script>
<script>
    $(function() {
        lightGallery(document.getElementById('animated-thumbnails-gallery'), {
            thumbnail: true,
            closeOnTap: true,
            //enableSwipe: false,
            mobileSettings: {controls: true, showCloseIcon: true, download: true,},
        });
    });
</script>

При этом возникает ошибка caught ReferenceError: lightGallery is not defined
Если подгружать lightgallery.umd.js на странице запроса $.ajax путем вставки
<script src="https://cdn.jsdelivr.net/npm/lightgallery@2.0.0-beta.3/lightgallery.umd.js"></script>

на страницу, то все работает нормально, без ошибок. Можно ли как-то подгружать его в html в ответе /ajax/photo/get_photos , чтобы всё отрабатывало нормально и не было ошибки?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Вы в принципе не должны так делать, такого рода скрипты подключатся единожды, а не по новой каждый раз.
<script>
	
	$(async function() {
		
		if (!window.lightGallery) {
			
			await $.getScript('https://cdn.jsdelivr.net/npm/lightgallery@2.0.0-beta.3/lightgallery.umd.js');
			
		}
		
		var response = await $.ajax({
			type: 'GET',
			url: '/ajax/photo/get_photos',
			data: { id: 1},
			cache: false,
			dataType: 'html'
		});
		
		response = '<script>' + response.replace(/^.*\<script\>/gs, '');
		
		$( "#user_photos" ).html(response);
		
		console.log(response);
		
	});
	
</script>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы