2014-05-09 6 views
2

저는 Kohana/php의 세계에 처음 왔으며 Ajax 요청의 결과를 얻는 방법을 이해하는 데 몇 가지 문제가 있습니다. 이 요청은 클릭 동작에서 호출되며 다음 메소드를 호출합니다. 내 컨트롤러의 내부 AJAX가있는 Kohana가 요청을받습니다.

function addClickHandlerAjax(marker, l){ 
    google.maps.event.addListener(marker, "click",function(){ 
    console.log(l.facilityId); 
    removeInfoWindow(); 
    //get content via ajax 
     $.ajax({ 
     url: 'map/getInfoWindow', 
     type: 'get', 
     data: {'facilityID': l.facilityId }, 
     success: function(data, status) { 
     if(data == "ok") { 
      console.log('ok'); 
     } 
     }, 
     error: function(xhr, desc, err) { 
     console.log(xhr); 
     console.log("Details: " + desc + "\nError:" + err); 
     } 
    }); // end ajax call 

}); 
} 

은 내가 피들러에서 HTTP 요청을 참조하는 방법

 public function action_getInfoWindow(){ 

     if ($this->request->current()->method() === HTTP_Request::GET) { 

     $data = array(
      'facility' => 'derp', 
     ); 

     // JSON response 
     $this->auto_render = false; 
     $this->request->response = json_encode($data); 

    } 
    } 

을 가지고 있고 그것은 올바른 facilityID 매개 변수를 통과했다. 그러나 나는 모든 조각을 연결하는 방법에 관해서 약간의 단절을 가지고있다.

답변

3

브라우저에 응답을 보내려면 Controller::request::response 대신 사용자 Controller::response이어야합니다. 따라서 코드는 다음과 같아야합니다.

public function action_getInfoWindow() { 
    // retrieve data 
    $this->response->body(json_encode($data)); 
} 

그러면 출력이 달라집니다.

자세한 내용은 Documentation을 확인하십시오.

편집

당신이 무엇을 할 수 있는지, 당신 거 사용 아약스 많이 요청 특히, 당신의 인생을 좀 더 쉽게하기 위해, 아약스 컨트롤러를 만드는 것입니다. 모든 수표와 변형을 처리하고 더 이상 걱정할 필요가 없습니다. 컨트롤러 예는 아래와 같습니다. Kohana가 예를 들어 출하 한 Controller_Template도 확인하십시오.

class Controller_Ajax extends Controller { 
    function before() { 
     if(! $this->request->is_ajax()) { 
      throw Kohana_Exception::factory(500, 'Expecting an Ajax request'); 
     } 
    } 

    private $_content; 

    function content($content = null) { 
     if(is_null($content)) { 
      return $this->_content; 
     } 
     $this->_content = $content; 
    } 

    function after() { 
     $this->response->body(json_encode($this->_content)); 
    } 
} 

// example usage 
class Controller_Home extends Controller_Ajax { 
    public function action_getInfoWindow() { 
     // retrieve the data 
     $this->content($data); 
    } 
}