HTML5新特性historypushState/replaceState解决浏览器刷新缓存
history.pushState()与history.replaceState()不刷新页面,只改变url
这个可以干啥用?一个比较常用的场景就是,配合 AJAX。
假设一个页面左侧是若干导航链接,右侧是内容,同时导航时只有右侧的内容需要更新,那么刷新整个页面无疑是浪费的。这时我们可以使用 AJAX 来拉取右面的数据。
但是如果仅仅这样,地址栏是不会改变的,用户无法前进、后退,也无法收藏当前页面或者把当前页面分享给他人;搜索引擎抓取也有困难。这时,就可以使用 HTML5 的 History API 来解决这个问题。
思路:首先绑定click事件。当用户点击一个链接时,通过preventDefault函数防止默认的行为(页面跳转),同时读取链接的地址(如果有 jQuery,可以写成$(this).attr('href')),把这个地址通过pushState塞入浏览器历史记录中,再利用 AJAX 技术拉取(如果有 jQuery,可以使用$.get方法)这个地址中真正的内容,同时替换当前网页的内容。
为了处理用户前进、后退,我们监听popstate事件。当用户点击前进或后退按钮时,浏览器地址自动被转换成相应的地址,同时popstate事件发生。在事件处理函数中,我们根据当前的地址抓取相应的内容,然后利用 AJAX 拉取这个地址的真正内容,呈现,即可。
最后,整个过程是不会改变页面标题的,可以通过直接对document.title赋值来更改页面标题。
实现过程:dispatchEvent模拟popstate事件
(1)session:会话级别,关闭会话后会关闭
(2)cookie:没有设置过期时间时是会话级别;在同一域名下访问cookie是相同的
(3)location:永久级别(除非客户端强制删除)
ajax
1.什么是ajax?有什么用?
Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页面局部刷新
优点:可以实现异步通信效果,页面局部刷新,带来更好的用户体验
1、最大的一点是页面无刷新,用户的体验非常好。2、使用异步方式与服务器通信,具有更加迅速的响应能力。3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
ajax的缺点1、ajax不支持浏览器back按钮。2、安全问题 AJAX暴露了与服务器交互的细节。3、对搜索引擎的支持比较弱。4、破坏了程序的异常机制。5、不容易调试。
2.什么是同源?
同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性
所谓同源就是同域名、同协议、同端口,只有同源的地址才能相互通过ajax方式请求
3.如何解决跨域?
1)使用JSONP(json+padding)把数据内填充起来
2)CORS方式(跨域资源共享),在后端上配置可跨域
3)服务器代理,通过服务器的文件能访问第三方资源
4.解释jsonp?
ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。
jsonp本质是通过URL的方式进行请求的,所以它是get方式请求,没有post
5.原生js ajax有哪些步骤?
//创建 XMLHttpRequest 对象 var ajax = new XMLHttpRequest();
//规定请求的类型、URL 以及是否异步处理请求。 ajax.open('GET',url,true);
//发送信息至服务器时内容编码类型 ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//发送请求 ajax.send(null);
//接受服务器响应数据 ajax.onreadystatechange = function () { if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) { } };
6.get与post
###代码上的区别
1:get通过url传递参数
2:post设置请求头 规定请求数据类型
###使用上的区别
1:post比get安全 (因为post参数在请求体中。get参数在url上面)
2:get传输速度比post快 根据传参决定的。 (post通过请求体传参,后台通过数据流接收。速度稍微慢一些。而get通过url传参可以直接获取)
3:post传输文件大理论没有限制 get传输文件小大概7-8k ie4k左右
4:get获取数据 post上传数据 (上传的数据比较多 而且上传数据都是重要数据。所以不论在安全性还是数据量级 post是最好的选择)
http常见状态码
一: 2开头状态码2xx (成功)表示成功处理了请求的状态代码
200 (成功) 服务器已成功处理了请求。 通常。
二: 3开头状态码3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
三: 4开头状态码4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理
1:400 (错误请求) 服务器不理解请求的语法。
2:403 (禁止) 服务器拒绝请求。
3:404 (未找到) 服务器找不到请求的网页。
四: 5开头状态码5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
500 (服务器内部错误) 服务器遇到错误,无法完成请求
XMLHttpRequest对象的常用方法和属性
open(“method”,”URL”) 建立对服务器的调用,第一个参数是HTTP请求 方式可以为GET,POST或任何服务器所支持的您想调用的方式。第二个参数是请求页面的URL。
send()方法,发送具体请求abort()方法,停止当前请求
readyState属性 请求的状态 有5个可取值0=未初始化 ,1=正在加载2=以加载,3=交互中,4=完成
responseText 属性 服务器的响应,表示为一个串
reponseXML 属性 服务器的响应,表示为XML
status 服务器的HTTP状态码,200对应ok 400对应not found