Ajax – 工作示例
让我们添加一个新的ajax页面,在tutorial模块中ajax,并异步获取书籍信息。为此,我们应该遵循以下步骤。
步骤 1:在模块配置中添加 Json 策略
更新 tutorial 模块配置文件中的视图管理器块 – myapp/module/Tutorial/config/module.config.php。然后,JsonStrategy将与 JsonModel 配合使用来编码和发送 json 数据。
'view_manager' => [
'template_map' => array
('layout/layout' => __DIR__ . '/../view/layout/newlayout.phtml'),
'template_path_stack' => [
'tutorial' => __DIR__ . '/../view',
],
'strategies' => array('ViewJsonStrategy',),
],
步骤 2:在 TutorialController.php 中添加 ajaxAction 方法
在TutorialController.php 中添加 ajaxAction 方法使用以下代码 −
public function ajaxAction() {
$data = $this->bookTable->fetchAll();
$request = $this->getRequest();
$query = $request->getQuery();
if ($request->isXmlHttpRequest() || $query->get('showJson') == 1) {
$jsonData = array();
$idx = 0;
foreach($data as $sampledata) {
$temp = array(
'author' => $sampledata->author,
'title' => $sampledata->title,
'imagepath' => $sampledata->imagepath
);
$jsonData[$idx++] = $temp;
}
$view = new JsonModel($jsonData);
$view->setTerminal(true);
} else {
$view = new ViewModel();
}
return $view;
}
在这里,ajaxAction 将检查传入的请求是否为 AJAX。如果传入请求是 AJAX,则将创建 JsonModel。否则,将创建一个普通的ViewModel。
在这两种情况下,书籍信息都将从数据库中获取并填充到模型中。如果模型是 JsonModel,则将调用 JsonStrategy,它将数据编码为 json 并返回作为响应。
$query->get('showJson') == 1 用于调试目的。只需在网址中添加showJson=1,页面将显示 json 数据。
步骤 3:添加 ajax.phtml
现在,为Ajax操作方法添加视图脚本 ajax.phtml。此页面将包含一个带有标签的链接 - Load book information。
单击该链接将执行 AJAX 请求,该请求将以 Json 数据的形式获取书籍信息,并将书籍信息显示为格式化表。AJAX 处理是使用
JQuery完成的。
完整的代码清单如下 −
<a id = "loadbook" href = "#">Load book information</a>
</br> </br>
<table class = "table">
<tbody id = "book">
</tbody>
</table>
<script language = "javascript">
$(document).ready(function(){
$("#loadbook").on("click", function(event){
$.ajax({
url: '/tutorial/ajax',
type: 'POST',
dataType: 'json',
async: true,
success: function(data, status) {
var e = $('<tr><th>Author</th><th>Title</th><th>Picture</th></tr>');
$('#book').html('');
$('#book').append(e);
for(i = 0; i < data.length; i++) {
book = data[i];
var e = $('<tr><td id = "author"></td><td id = "title"></td>
<td id="imagepath"><img src = ""/></td></tr>');
$('#author', e).html(book['author']);
$('#title', e).html(book['title']);
$('#imagepath img', e).attr('src', book['imagepath']);
$('#book').append(e);
}
},
error : function(xhr, textStatus, errorThrown) {
alert('Ajax request failed.');
}
});
});
});
</script>
步骤 4:运行应用程序
最后,运行应用程序 − http://localhost:8080/tutorial/ajax,然后单击“Load book information”链接。
结果将如下所示 −
Ajax页面 −
包含图书信息的Ajax页面
包含调试信息的 Ajax 页面