2012-11-08 4 views
0

호출 페이지를 반환 유지 :아약스 내가 호출되고이 아약스 요청을

$(document).ready(function(){ 
    $('#PostTitle').change(function(){ 
     var inputstring=$("#PostTitle").val(); 
     submitData(inputstring); 
    }); 
}); 

function submitData(inputstring){ 
$.ajax({ 
     type: 'POST', 
     url: '/myWebsite/posts/set_post_images', 
     data: inputstring, 
     dataType: "text", 
     success:function(data){ 
      $("#selectImage").replaceWith($('#selectImage', $(data))); 
     }, 
     error:function(){ 
      $('#selectImage').html("You failed misserably."); 
     }, 
     timeout: 5000 
    }); 
} 

위의 코드는 add.ctp 파일에합니다 (게시물 컨트롤러에 대한보기) . 호출 된 함수 set_post_images는 게시물 컨트롤러 자체에 있으며 다음과 같습니다

public function set_post_images($url = null) { 
    if($url!=null){ 
     $this->set('imageArray', $this->getImages($url)); 
    } else { 
     $this->set('imageArray', array("/img/someImage.png")); 
    } 
    if ($this->RequestHandler->isAjax()) { 
     $this->autoRender = false; 
     $this->layout = 'ajax'; 
     $this->render('/elements/selectImageElement'); 
    } 
    return; 
} 

는 난 할 노력하고있어 새로운 요소로 대체 ​​selectImage의 사업부에서 기존 요소를 얻는 것입니다. 문제는 아약스가 add.ctp 파일 (요청이 호출 된 파일)의 전체 내용을 계속 반환한다는 것입니다.

무엇이 문제의 원인 일 수 있으며 어떻게 해결할 수 있습니까? 를 해결

$ this-> Auth-> 수 (('set_post_images'배열));

편집 응답이 전체 페이지를 반환 했으므로 설정되지 않았습니다. 조치를 취한 후에 고칠 수 있습니다.

또한 컨트롤러에서 변수는 $ url을 통해가 아니라 $ this-> data [ 'url']를 통해 액세스됩니다.

해피 코딩!

+0

요청이 어떻게 생겼는지 확인하기 위해서는 브라우저의 개발자 도구를 사용합니다. 요청 본문은 여기서는 상관없는 것처럼 보이지만 URL이 중요 할 수 있습니다. 코드에서 URL을 설정했는데 브라우저가 실제로 요청한 부분을 확인하는 것이 가장 좋습니다. 거기에서 행동의 논리를 단계별로 실행하십시오. isAjax()가 true인가? 최근 Cake는 RequestHandler를 사용하지 않고'$ this-> request-> is ('ajax')와 같은 명령문을 갖게 될 것이다. 마지막으로 브라우저에서 서버 응답을 확인하십시오. 서버가'add.ctp' 뷰 전체를 반환하고 있습니까, 아니면'replaceWith' 코드가 실수입니까? –

+0

안녕 벤. 이 요청은 나에게 좋아 보이는 : '요청 URL : HTTP : // localhost를/CheckMates/글/set_post_images 신청 방법 : POST 상태 코드 : 200 OK' 요청 헤더도 좋아 보이는이 포함되어 있습니다 : ' 호스트 : localhost 출처 : http : // localhost Referer : http : // localhost/CheckMates/posts/add' 디버깅이 전혀 표시되지 않기 때문에 컨트롤러 동작 자체를 확인하는 방법을 모르겠습니다. (이 경우 정상 일 수 있습니까?). 응답은 전체 add.ctp입니다. 브라우저의 dev 도구는이를 보여 주며, 경고 (데이터)로 데이터를 출력하면 전체 코드를 표시합니다. – Cos

+0

아, 또한 코드로 RequestHandler를 대체했습니다. 요청을 확인하기 전에 – Cos

답변

1

$ this-> Auth-이

function submitData(inputstring){ 
$.ajax({ 
    type: 'POST', 
    url: '/myWebsite/posts/set_post_images', 
    data: inputstring, 
    dataType: "text", 
    success:function(data){ 
     var images = data.find('#returned-images'); 
     var getResults=images.html(); 
     $("#selectImage").html(getResults); 
    }, 
    error:function(){ 
     $('#selectImage').html("You failed misserably."); 
    }, 
    timeout: 5000 
}); 

}

환호에 아약스 코드를 변경 > 허용 (배열 ('set_post_images')); 응답이 전체 페이지를 반환 했으므로 설정되지 않았습니다. 조치를 취한 후에 고칠 수 있습니다.

또한 컨트롤러에서 변수는 $ url을 통해가 아니라 $ this-> data [ 'url']를 통해 액세스됩니다.

해피 코딩!

-1

'반환 - 이미지'ID로 사업부에 set_post_images의 수익을 넣으십시오 다음

0

다음 코드를 시도하십시오,

public function set_post_images($url = null) { 
    if($url!=null){ 
     $this->set('imageArray', $this->getImages($url)); 
    } else { 
     $this->set('imageArray', array("/img/someImage.png")); 
    } 
    if ($this->RequestHandler->isAjax()) { 
     $this->autoRender = false; 
     $this->layout = 'ajax'; 
     $this->render('/elements/selectImageElement'); 
    } 
    exit; 
}