2013-03-12 3 views
1

У меня появилось модальное диалоговое окно, которое позволяет пользователям изменять свои пароли после выполнения определенного условия.Возврат только тела с помощью запроса 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"); 
} 

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

ответ

2

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

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

$this->layout = "ajax"; 

ИЛИ

Вы можете отключить раскладку как этот

$this->layout = null ; 

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

public function listnames() 
{ 
    $this->layout = null ; 
    // $this->layout = "ajax"; 
    //other code. 
} 
+0

Я читал, что много, но в какой контроллер я поставил это (учитывая, что я запускаю это из скрипта в каталоге страниц. ld Я изменяю свою структуру, поэтому у меня есть функция changePassword в моем контроллере пользователей, и она просто вызывает это при отправке? Как я могу это сделать? – Albert

+0

@DarkRanger измените его в файле управления паролем контроллера ... и увидите магию –

+0

Нет. Контроллер страниц - это стандартный контроллер, который поставляется с cakePHP. Когда я добавляю это действие к контроллеру, ничего не происходит. – Albert

Смежные вопросы