AJAX是Web编程中的现代技术。它提供了用于异步发送和接收网页数据的选项,而无需刷新页面。Zend框架提供了一个通过zend-view和zend-json组件使用json模型的选项。让我们在本章中学习Zend AJAX编程。
安装json组件
Zend json组件可以使用Composer命令安装,如下所示:
composer require zendframework/zend-json
概念
Zend框架提供了两种方法来轻松编写支持AJAX的Web应用程序。它们如下-
- Request对象中的isXmlHttpRequest()方法–如果发出AJAX请求,则请求对象的isXmlHttpRequest()方法返回true,否则返回false。此方法用于在服务器端正确处理AJAX请求。
if ($request->isXmlHttpRequest()) { // Ajax request } else { // Normal request }
- Zend / View / Model / JsonModel – JsonModel是ViewModel的替代方案,仅可用于AJAX和REST API方案。JsonModel和JsonStrategy(将在模块的视图管理器块中配置)一起将模型数据编码为Json,并将其作为响应而不是视图(phtml)返回。
AJAX –工作示例
让我们在教程模块中添加一个新的ajax页面,即ajax,并异步获取图书信息。为此,我们应遵循以下步骤。
步骤1:在模块配置中添加JsonStrategy
在教程模块配置文件– 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方法
使用以下代码将ajaxAction方法添加到TutorialController.php中-
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,并返回作为响应。
在$查询- >获取(“showJson”)== 1用于调试的目的。只需在URL中添加showJson = 1,页面就会显示json数据。
步骤3:添加ajax.phtml
现在,为ajaxAction方法添加视图脚本ajax.phtml。该页面将带有标签-加载书信息的链接。
单击该链接将发出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,然后单击“加载书信息”链接。
结果将如下所示
Ajax页面
带有图书信息的Ajax页面
带有调试信息的Ajax页面
作者:terry,如若转载,请注明出处:https://www.web176.com/zendframework/271.html