我是Kohana / php世界的新手,我遇到了一些了解如何获取ajax请求结果的问题。正在通过单击操作调用此请求,并且正在调用以下方法。
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
});
}
我的控制器里面有一个方法
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);
}
}
我在fiddler中看到一个HTTP请求,它传递了正确的facilityID参数。但是,我对如何将所有部分连接在一起有一些脱节。
答案 0 :(得分:3)
要向浏览器发送回复,您应该使用Controller::response
而不是Controller::request::response
。所以你的代码应该是这样的:
public function action_getInfoWindow() {
// retrieve data
$this->response->body(json_encode($data));
}
那应该给你一些输出。
查看Documentation以获取更多详细信息。
修改强>
你可以做些什么,让你的生活更轻松,特别是如果你要经常使用ajax请求,就是创建一个Ajax控制器。你可以填写所有的检查和变换,而不再担心它。示例控制器可能如下所示。另请查看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 );
}
}