Правильная 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 ответа

  • 1
    Михаил Ушенин 18 мая 2015 04:28 #

    Можно в теме дизайна добавить условия вида

    {if !$wa->get('ajax')}...{/if}

    для кусков HTML, которые не нужно отдавать по AJAX, когда в запрошенном URL присутствует параметр ajax=1.

    И в URL запроса содержимого страниы в вашем JavaScript-коде добавить параметр ?ajax=1, например:

    url: "http://vsepora.ru/portfolio/?ajax=1",

  • 1
    Михаил Ушенин 18 мая 2015 05:27 #

    Можно в теме дизайна добавить условия вида

    {if !waRequest::isXMLHttpRequest()}...{/if}

    для кусков HTML, которые не нужно отдавать по AJAX.

  • 1
    Леман Евгений 18 мая 2015 10:09 #

    Отображается только контент, т.к. скорее всего вы обращаетесь напрямую к экшену, который возвращает лишь шаблон(setTemplate()). А layout всего этого задается в каком-нибудь контроллере.

    Да и не совсем логично, чтобы менялась вся страница. На то он и AJAX. Меняет только динамическую часть.

  • 1
    Леман Евгений 18 мая 2015 10:48 #

    Как уже было замечено выше, можно в этом контроллере(если это ваше приложение) дописать условие:

    {if !waRequest::isXMLHttpRequest()} $this->setLayout(new appModuleLayout()); {/if}
    Тогда для AJAX запросов будет отдаваться весь код страницы, а не только самого шаблона.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите