2013-03-12 2 views
1

특정 조건이 충족되면 사용자에게 암호를 변경하도록 요청하는 모달 대화 상자가 나타납니다.CakePHP Ajax 요청이있는 본문 만 반환합니다.

그러나 완벽하게 작동하지만 요청이 완료되면 템플릿을 포함한 전체 페이지를 반환합니다.

사용자가 로그인하여 요청한 페이지로 리디렉션되기 때문에 모든 페이지에 있어야하므로 기본 레이아웃 (APP/View/Layout/default.ctp)으로 스크립트를 실행합니다.

알고 싶습니다. 템플릿이 아닌 요청한 페이지의 내용 만 표시하려면 어떻게해야합니까? 순간

//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"); 
} 

난 그냥 응답을 확인하는 하나의 문장을 울리는 해요 :

여기 내 JQuery와 스크립트입니다.

답변

2

Cakephp를 사용하면 모든 컨트롤러 동작에 대한 템플릿을 덮어 쓸 수 있습니다.

내부 컨트롤러 동작 아래에 글을 씁니다. 당신은 당신의 행동이 될 것입니다 지금이

$this->layout = null ; 

같은 레이아웃을 사용하지 않도록 설정할 수 있습니다

$this->layout = "ajax"; 

또는

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

그 많은 읽을 수 있지만 어떤 컨트롤러에 내가 배치해야합니까 이것은 (내가 페이지 디렉토리의 스크립트에서 이것을 실행하고 있음을 고려하여). ld 나는 내 사용자 컨트롤러에서 changePassword 함수를 갖기 위해 구조를 변경하고 제출할 때이를 호출합니다. 나는 어떻게 그것에 대해 갈 것인가? – Albert

+0

@DarkRanger가 페이지 컨트롤러의 password_change 액션을 변경하고 마법을 봅니다. –

+0

아니요. 페이지 컨트롤러는 cakePHP와 함께 제공되는 표준 컨트롤러입니다. 컨트롤러에 해당 동작을 추가하면 아무 일도 일어나지 않습니다. – Albert