day22

### 为什么用Ajax?
用Ajax实现翻页等内容切换是有原因的。在传统的无Ajax的站点里,页面A和页面B可能只有10%的地方是不同的,其他90%的内容(尤其是导航、页脚等公用元素)都是一样的,但却仍然需要浏览器下载并显示新的一整个页面。而如果使用Ajax,不仅节省了浏览器需要下载的资源,而且无刷新切换明显比页面跳转更平滑、流畅。

---

###介绍HTML5 history API

HTML5 history API只包括2个方法:
##### history.pushState()

第1个参数是状态对象,它可以理解为一个拿来存储自定义数据的元素。它和同时作为参数的url会关联在一起。

第2个参数是标题,是一个字符串,目前各类浏览器都会忽略它(以后才有可能启用,用作页面标题),所以设置成什么都没关系。目前建议设置为空字符串。

第3个参数是URL地址,一般会是简单的?page=2这样的参数风格的相对路径,它会自动以当前URL为基准。需要注意的是,本参数URL需要和当前页面URL同源,否则会抛出错误。

调用pushState()方法将新生成一条历史记录,方便用浏览器的“后退”和“前进”来导航(“后退”可是相当常用的按钮)。另外,从URL的同源策略可以看出,HTML5 history API的出发点是很明确的,就是让无跳转的单站点也可以将它的各个状态保存为浏览器的多条历史记录。当通过历史记录重新加载站点时,站点可以直接加载到对应的状态。

##### history.replaceState()

它和history.pushState()方法基本相同,区别只有一点,history.replaceState()不会新生成历史记录,而是将当前历史记录替换掉。

##### window.onpopstate
push的对立就是pop,可以猜到这个事件是在浏览器取出历史记录并加载时触发的。但实际上,它的条件是比较苛刻的,几乎只有点击浏览器的“前进”、“后退”这些导航按钮,或者是由JavaScript调用的history.back()等导航方法,且切换前后的两条历史记录都属于同一个网页文档,才会触发本事件。

上面的“同一个网页文档”请理解为JavaScript环境的document是同一个,而不是指基础URL(去掉各类参数的)相同。也就是说,只要有重新加载发生(无论是跳转到一个新站点还是继续在本站点),JavaScript全局环境发生了变化,popstate事件都不会触发。

popstate事件是设计出来和前面的2个方法搭配使用的。一般只有在通过前面2个方法设置了同一站点的多条历史记录,并在其之间导航(前进或后退)时,才会触发这个事件。同时,前面2个方法所设置的状态对象(第1个参数),也会在这个时候通过事件的event.state返还回来。

此外请注意,history.pushState()及history.replaceState()本身调用时是不触发popstate事件的。pop和push毕竟不一样!

```
$(window).on("popstate", function(event) {
    var state = event.originalEvent.state;
    state = state || location.hash.slice(location.hash.indexOf("/") + 1)
    ...
});
```
时间: 2024-10-29 19:10:14

day22的相关文章

python_way ,day22 tonardo

python_way day22 1.tonardo 一.tonardo: #!/usr/bin/env python3# Created by han on 2016/10/23import os, syssys.path.append(os.path.dirname(os.path.abspath(__file__)))import tornado.ioloopimport tornado.webUSER_INFO = [] class MainHadler(tornado.web.Requ

day22 session登录

day22 知识点概要 - Session - CSRF - Model操作 - Form验证(ModelForm) - 中间件 - 缓存 - 信号 内容详细: 1. Session 基于Cookie做用户验证时:敏感信息不适合放在cookie中 a. Session原理 Cookie是保存在用户浏览器端的键值对 Session是保存在服务器端的键值对 b. Cookie和Session对比 c. Session配置(缺少cache) d. 示例:实现两周自动登陆 - request.sessi

Python基础day-22[面向对象:反射,其他命令参数]

反射: 什么是反射: 主要是指程序可以访问,检测和修改本身状态或行为的一种能力. Python中的一切事物都是对象. 四个实现自省的函数: 类和对象均可以使用. class A: name = 'abc' age = 19 #类的使用 print(hasattr(A,'n1me')) #判断类是否含有某个属性 hasattr(类或者对象名,属性名) print(getattr(A,'name')) #获取对应属性的属性值 getattr(类或者对象名,属性名,出错返回的内容) <----出错返回

day22 Java语言中的------JDBC连接

day22 Java语言中的------JDBC连接 一.JDBC概述: "JDBC"就是Java连接数据库,根据数据库的不同建立的连接也有一定的区别.我们主要还是对MySQL数据库进行数据的操作.JDBC架构中主要包含两种:一种是JDBC应用程序层,一种是JDBC驱动程序层.下表是JDBC与各种数据库连接的图示.下面就具体的来了解一下Java与数据库之间的一个关系. 二.JDBC: 在具体开始学习JDBC之前,做好相应的准备工作.在MySQL数据库官网下载好相应的jar包(mysql

【DAY22】MySQL的学习笔记

rdbms --------------- table:field, record, sql --------------- crud insert into tablename(id,...) values(1,'sss',...) ; delete from tablename where id = 1 or id = 3 or id = 5 ; delete from tablename where id in(1,3,5); //in()范围运算  == or delete from t

#在蓝懿学习iOS的日子#day22

从相册获取图片进行编辑 1.搭建界面,添加按钮进行关联 2.从点击按钮跳转到相册的界面 3.选择将要跳转下一页面 4.已经完成选择图片 @property (nonatomic, strong)UIScrollView *sv; @property (nonatomic, strong)NSMutableArray *seletedIVs; @end @implementation ViewController - (IBAction)clicked:(id)sender { self.sele

重修课程day22(面向对象三之继承和派生)

面向对象的三大特性:封装,继承和多态 一 继承 1 什么是继承:1.1 什么是什么的关系.一个类是另一个类的子类. 1.2 继承是一种创新类的方式.新建的类可以继承一个或多个父类.父类又称为基类或超类,新建的类又称为派生类或子类 继承一个父类叫做单继承:继承多个父类叫做多继承. 2 继承的好处:减少代码的冗余,增强了代码的重用性. 二 继承的用法 super:调用父类的功能和方法 格式一:在子类的内部调用父类的属性和方法 class 父类名: def  属性(self): 功能 class 子类

Python开发基础-Day22反射、面向对象进阶

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象,如果是返回True 1 class Foo(object): 2 pass 3 obj = Foo() 4 print(isinstance(obj, Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类,如果是返回True 1 class Foo(object): 2 pass 3 cla

day22 面向对象初级

面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度的问题简单化.流程化 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计:核心是对