《jQuery Mobile快速入门》—— 2.3 Ajax驱动的导航

简介:

本节书摘来异步社区《jQuery Mobile快速入门》一书中的第2章,第2.3节,作者:【美】Brad Broulik,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 Ajax驱动的导航

jQuery Mobile快速入门
在上面提到的多页面案例中(见程序清单2-3),我们了解到jQuery Mobile如何从一个内部页面导航到另外一个内部页面。当多页面文档在初始化时,内部页面已经添加到DOM中,这样从一个内部页面转换到另外一个页面时,速度才会相当快。在从一个页面导航到另外一个页面时,我们可以配置要应用的页面转换类型。默认情况下,框架会为所有的转换应用一个“滑动(slide)”效果。在本章后面,我们会讨论可以选择的转换和转换类型。

95dec27ce864ca88786caad77f320563b550d088

当一个单页面转换到另外一个单页面时,导航模型是不同的。例如,我们可以从多页面中提取出contact页面,然后命名为contact.html文件。现在我们的home页面(hijax.html)可以通过一个普通的HTTP链接引用来返回contact页面。

522d967611e0127d5390b142be3bcf079ababf15

当单击上面的“Contact Us”链接时,jQuery Mobile将会按照如下步骤处理该请求。

1.jQuery Mobile会解析href,然后通过一个Ajax请求(Hijax)载入页面。为了获得一个直观了解,请看图2-3。如果成功载入页面,则该页面会添加到当前页面的DOM中。

当页面成功添加到DOM中后,jQuery Mobile可以根据需要来增强该页面,更新基础(base)元素的@href,并设置data-url属性(如果没有被显式设置的话)。

f9727f46c247a7881d0d421264160b1d6b34b529

2.框架随后使用应用的默认“滑动”转换模式转换到一个新的页面。框架也可以实现无缝的CSS转换,因为“from”页面和“to”页面都存在于DOM中。在转换完成之后,当前可见的页面或活动页面将会被指定为“ui-page-active”CSS类。

3.产生的URL也可以作为书签。例如,如果想深链接(deep link)到contact页面,则可以通过其完整的路径来访问:

http://<host:port>/ch2/contact.html

注意:

作为一个额外的优点,如果浏览器支持HTML5的pushState,则基于Ajax的导航也可以在该浏览器中产生完全正确的URL。桌面式Safari、Chrome、Firefox和Opera的最近版本都支持HTML5的这个特性。Android(2.2+)和iOS5也支持pushState。在不支持该特性的浏览器中,基于#的URL(http://<host:port>/hijax.html#contact.html)将会用来保持共享URL和对URL添加书签的能力。
4.如果页面载入失败,则会显示和淡出一条短的错误消息,该消息是对“Error Loading Page(页面载入错误)”消息的覆写(overlay)(见图2-4)。

71d120e488ab3c8f332c9fd673a90c4d375f7419

2.3.1 $.mobile.changePage()

changePage( )函数处理从一个页面转换到另一个页面时涉及的所有细节。你可以转换到除当前页面之外的任何页面。可用的转换类型的完整列表如表2-1所示。

2.3.2 用途

$.mobile.changePage(toPage, [options])

2.3.3 参数

toPage(string或jQuery集合)。将要转向的页面。
toPage(string)。一个文件URL(“contact.html”)或内部元素的ID(“#contact”)。
toPage(jQuery集合)。包含一个页面元素的jQuery集合,而且该页面元素是该集合的第一个参数。
options(object)。配置changePage请求的一组键/值对。所有的设置都是可选的。
transition(string,default: $.mobile.defaultTransition)。为changePage应用的转换。默认的转换是“滑动”。
reverse(boolean, default:false)。指示该转换是向前转换还是向后转换。默认的转换是向前。
changeHash(boolean, default:ture)。当页面转换完成之后,更新页面URL的#。
role(string,default:“page”)。在显示页面时使用的data-role值。如果页面是对话框,则使用“dialog”。
pageContainer(jQuery集合,default:$.mobile.pageContainer)。指定应该包含载入页面的元素。
type (string, default:“get”)。在生成页面请求时,指定所使用的方法(get或post)。
data (string或object, default:undefined)。发送给一个Ajax页面请求的数据。
reloadPage (boolean, default: false)。强制页面重新载入,即使它已经位于页面容器的DOM中。
showLoadMsg (boolean, default: true)。在请求页面时,显示载入信息。
fromHashChange(boolean, default: false)。指示changePage是否来自于一个hashchange事件。

f96c4ecb4d9ee8af065d475d56001f979caed59e

重要:

Ajax导航不能用于载入一个外部链接的情况。

3589bf0d2e9669e2aef21ebf77b82bc23d9d3a26

在这样的情况下,将会发生正常的HTTP请求过程。而且,也无法应用CSS转换。前面提到,通过动态地将“from”和“to”页面载入到同一个DOM,框架可以实现平滑的转换,而且随后也可以应用一个平滑的CSS转换。不使用Ajax导航,则无法实现平滑转换,而且在转换期间,也不会显示默认的载入消息($.mobile.loadingMessage)。

2.3.4 配置Ajax导航

Ajax导航是全局启用的,当你很在意DOM的大小时,或者是你需要支持的某个特定设备不支持hash历史更新时(见下面的“注意”),则可以禁用这个特性。默认情况下,jQuery Mobile可以为我们管理DOM的大小或缓存,它只将活动页面转换所涉及的“from”和“to”页面合并到DOM中。要禁用Ajax导航,在绑定移动初始事件时,设置$.moible.ajaxEnabled=false。有关配置jQuery Mobile或管理DOM缓存的更多详情,请见第8章。

注意:

在所有已知与hash历史更新有冲突的平台上,Ajax导航已经被禁用。例如,jQuery Mobile已经为BlackBerry 5、Opera Mini(5.0-6.0)、Nokia Symbian 3和Windows Phone 6.5禁用了Ajax导航($.mobile.ajaxEnabled=false)。在使用普通的HTTP和全页面刷新时,这些设备更为实用。

相关文章
N..
|
2月前
|
XML JSON 前端开发
jQuery实现Ajax
jQuery实现Ajax
N..
22 1
|
5月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
62 0
|
2月前
|
JavaScript 前端开发
jquery实现二级导航下拉菜单效果实例
jquery实现二级导航下拉菜单效果实例
23 0
|
3月前
|
JavaScript 前端开发 Java
jquery ajax+spring mvc上传文件
jquery ajax+spring mvc上传文件
|
4月前
|
前端开发 JavaScript
Jquery ajax捕获错误信息
Jquery ajax捕获错误信息
16 0
|
4月前
|
JSON 缓存 前端开发
Jquery中AJAX的应用
Jquery中AJAX的应用
43 0
|
5月前
|
JSON 前端开发 JavaScript
jQuery中ajax的使用
jQuery中ajax的使用
|
5月前
|
XML JavaScript 前端开发
【Web智能聊天客服】之JavaScript、jQuery、AJAX讲解及实例(超详细必看 附源码)
【Web智能聊天客服】之JavaScript、jQuery、AJAX讲解及实例(超详细必看 附源码)
54 0
|
5月前
|
前端开发 JavaScript API
【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本
【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本
|
JavaScript 前端开发 UED
精心挑选的12款优秀 jQuery Ajax 分页插件和教程
  在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示。Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 jQuery 框架很容易实现各种基于 Ajax 技术实现的功能。
1148 0