Возврат только тела с запросом CakePHP Ajax

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

Это работает отлично, однако, когда запрос завершен, он возвращает всю страницу, включая шаблон.

Я запускаю скрипт в макете по умолчанию (APP/View/Layout/default.ctp) потому что это должно быть на каждой странице, так как пользователь вошел в систему и затем перенаправлен на запрошенную страницу.

Я хочу знать, как мне показать только содержимое запрашиваемой страницы, а не шаблон?

Вот мой скрипт jquery:

//In the default layout
$(document).ready(function(e) {
var $dialog = $("#view_dialog").dialog(
{
    autoOpen: false,
    closeOnEscape: false,
    closeText: 'hide',
    draggable: false,
    modal: true,
    resizable: false,
    hide:"fade",
    title: 'Password Change Required',
    open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
    buttons: {
        "Change Now": function() {
            if($('#password').val() != "" && $('#confirm').val() != "") {
                if($('#password').val() == $('#confirm').val()) {
                    $.ajax({
                        type: 'GET',
                        url: 'pages/password_change',
                        data: { password:$('#password').val(), usern : $('#usern').val() },
                        success: function(data) {
                        if(data.indexOf("SUCCESS") != -1) {
                            data = data.replace("SUCCESS", "");
                            $('#passAlert').removeClass('ui-state-error').addClass('ui-state-highlight').html(data).show('fast');
                            setTimeout(function() { $(this).dialog('close'); },1000);
                        } else {
                            data = data.replace("FAIL", "");
                            $('#passAlert').html(data).show('fast');
                        }
                    },
                    error: function(xhr,ajaxOptions,thrownError) {
                        data = data.replace("FAIL", xhr.status + ' - ' + thrownError);
                        $('#passAlert').html(data).show('fast');
                    }
                });
            } else {
                $('#passAlert').html("Password doesn't match.").show('fast');
            }
        } else
            $('#passAlert').html("Please complete all boxes.").show('fast');
        }
    }
});
if(<?php echo $showPopup ?>) {
    $dialog.dialog("open");
}

В данный момент я просто повторяю одно предложение, чтобы проверить ответ.

1 ответ

Решение

Cakephp позволяет нам перезаписывать шаблон при каждом действии контроллера.

внутри действия контроллера напишите ниже строки.

$this->layout = "ajax";

ИЛИ ЖЕ

Вы можете отключить макет, как это

$this->layout = null ;

Теперь ваши действия станут

public function listnames()
{
    $this->layout = null ;
    // $this->layout = "ajax";
    //other code.
}
Другие вопросы по тегам