반응형
Zend Framework가 AJAX 응답을 전송할 때 보기/레이아웃을 렌더링하지 않도록 하려면 어떻게 해야 합니까?
이것에 대해 Zend의 문서는 명확하지 않다.
문제는 디폴트로는 Zend가 각 컨트롤러 액션의 마지막에 뷰를 자동으로 렌더링한다는 것입니다.레이아웃을 사용하고 있다면, 왜 사용하지 않는가?그것도 렌더링 됩니다.일반 웹 페이지에서는 괜찮지만, AJAX 응답을 보낼 때는 이 모든 것을 원하지 않습니다.어떻게 하면 Zend가 액션 바이 액션으로 자동 렌더링되지 않도록 할 수 있습니까?
AJAX 응답을 송신하는 액션의 내부에서 이 코드를 호출합니다.
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
그러면 해당 작업에 대한 레이아웃 엔진이 비활성화되고 해당 작업에 대한 자동 뷰 렌더링이 꺼집니다.그런 다음 AJAX 출력을 원하는 대로 "에코"할 수 있습니다. 일반적인 뷰/레이아웃 자료가 전송될 염려가 없습니다.
AJAX가 JSON을 반환하는 경우 JSON 액션 도우미를 사용할 수 있습니다.
$this->_helper->json($data);
이 도우미는json_encode
$data를 JSON 헤더로 출력하고 마지막으로 다이(die)를 사용하면 레이아웃 및 뷰 렌더링을 사용하지 않고 깨끗한 JSON을 얻을 수 있습니다.
f. ajax를 위한 다른 액션에 대한 여러 ACL 체크를 피하기 위해 이 구성을 실제로 사용하고 있습니다.
public function photosAction() {
if ($this->getRequest()->getQuery('ajax') == 1 || $this->getRequest()->isXmlHttpRequest()) {
$params = $this->getRequest()->getParams();
$result = false;
switch ($params['act']) {
case 'deleteImage':
//deleting something
...
$result = true; //ok
break;
default :
$result = array('error' => 'Invalid action: ' . $params['act']);
break;
}
$this->_helper->json($result);
}
// regular action code here
...
}
또는 단순히 동작의 끝에 die() 함수를 넣을 수도 있습니다.
public function someAction()
{
echo json_encode($data);
die();
}
언급URL : https://stackoverflow.com/questions/1498692/how-do-you-make-zend-framework-not-render-a-view-layout-when-sending-an-ajax-res
반응형
'programing' 카테고리의 다른 글
BrowserRouter와 history.push()가 있는 라우터 (0) | 2023.04.01 |
---|---|
d3.contract 축의 날짜 처리 (0) | 2023.03.27 |
setState in reactjs가 Sync가 아닌 비동기인 이유는 무엇입니까? (0) | 2023.03.27 |
여러 인수를 사용하여 Angular.js 필터를 호출하려면 어떻게 해야 합니까? (0) | 2023.03.27 |
반응의 getElementById (0) | 2023.03.27 |