有沒有具體的演示或示例代碼,我知道的,所以希望這些提示將幫助您開始使用它...
這是可能的,而且比較容易,接受AJAX請求,併產生JSON對Kohana的迴應。首先要注意的是,除非特別指出,Kohana的將總是嘗試生成視圖,首先會失敗,因爲一個JSON響應,以便第一件事:
if ($this->request->is_ajax()) {
// Disable any rendering of the template so it just returns json.
$this->auto_render = FALSE;
}
你可能會想把它放在before()方法中,可能是父控制器,以便它在從數據庫獲取數據之前始終運行。
我個人喜歡這樣的事情是建立一個標準的AJAX響應數組,以便數據總是以相對標準的格式返回。示例:
// Standard ajax response array.
$this->ajax_response = array(
'success' => FALSE,
'error' => NULL,
'raw_data' => NULL,
'generated' => ''
);
自定義上述以符合您的要求的用法。你可能也想在你的before()方法中使用它。
現在在您的操作方法中,從數據庫中獲取數據並將其添加到數組中。
public function action_foobar() {
// Get the primary key ID from the URL.
$var1 = $this->request->param('var1');
$data = ORM::factory('Model', $var1);
if ($data->loaded()) {
$this->ajax_response['success'] = TRUE;
$this->ajax_response['raw_data'] = $data;
} else {
$this->ajax_response['error'] = 'Data could not be found.';
}
}
然後,您應該能夠通過調用一個網址,如http://www.website.com/controller/foobar/42
的最後一塊拼圖真的返回這個數據來請求這個數據,此刻的Kohana不會輸出任何東西,因爲我們已經告訴它不要。在你()方法之後,請執行下列操作:
if ($this->request->is_ajax()) {
$this->request->headers('Content-Type', 'application/json');
$this->response->body(json_encode($this->ajax_response));
}
然後你可以自由地詮釋這種反應,但是你在jQuery的看適合你的客戶端應用程序:
$.ajax({
type: "POST",
url: "http://www.website.com/controller/foobar/" + foobarId,
dataType: 'json',
success: function (data) {
if (!data.success) {
alert(data.error);
} else {
// Handle the returned data.
}
},
error: function (xhr, status, errorThrown) {
// Something went very wrong (response failed completely).
alert(errorThrown);
}
});
好運與建立你的應用程序!我希望這有助於至少讓你開始。