Правильная ajax-подгрузка страницы
Добрый день!
Пишу сайт , в котором подгрузка страниц должна осуществляться через ajax. Столкнулся со странностью, объяснение которой в хелпе не нашёл.
Ссылки в меню выводятся в формате
<a href="#" id="getContent2">Портфолио</a>
Когда кликаем по ссылке , срабатывает скрипт
$(document).ready(function(){
$('#getContent2').click(function(){
$.ajax({
url: "http://vsepora.ru/portfolio/",
cache: false,
beforeSend: function() {
$('#ajaxContent').html('Загрузка');
},
success: function(html){
$("#ajaxContent").html(html);
}
});
return false;
});
});
Логично было бы, чтоб внутри блока <div id="ajaxContent"></div> отображался код всего сайта от <html> и до</html>, однако отображается только сам контент страницы, без всех вводных и завершающих кодов. Где неточность, что упущено?
Хотелось бы разобраться, дабы по незнанию не создать уязвимость на сайте.
4 ответа
Можно в теме дизайна добавить условия вида
{if !$wa->get('ajax')}...{/if}
для кусков HTML, которые не нужно отдавать по AJAX, когда в запрошенном URL присутствует параметр ajax=1.
И в URL запроса содержимого страниы в вашем JavaScript-коде добавить параметр ?ajax=1, например:
url: "http://vsepora.ru/portfolio/?ajax=1",
Можно в теме дизайна добавить условия вида
{if !waRequest::isXMLHttpRequest()}...{/if}
для кусков HTML, которые не нужно отдавать по AJAX.
Отображается только контент, т.к. скорее всего вы обращаетесь напрямую к экшену, который возвращает лишь шаблон(setTemplate()). А layout всего этого задается в каком-нибудь контроллере.
Да и не совсем логично, чтобы менялась вся страница. На то он и AJAX. Меняет только динамическую часть.
Как уже было замечено выше, можно в этом контроллере(если это ваше приложение) дописать условие:
{if !waRequest::isXMLHttpRequest()} $this->setLayout(new appModuleLayout()); {/if}
Тогда для AJAX запросов будет отдаваться весь код страницы, а не только самого шаблона.