Ajax 的事理 通过 XmlHTTPRequest 工具来向做事器发异步要求,从做事器得到数据,然后用 javascript 来操作 DOM 而更新页面。这个中最关键的一步便是从做事器得到要求数据。 XMLHTTPRequest 是 Ajax 的核心机制,它是在 IE5 中首先引入的,是一种支持异步要求的技能。 大略的说,也便是 javascript 可以及时向做事器提出要乞降处理相应,而不壅塞用户。达到 无刷新的效果。
Ajax 的优点
Ajax 的缺陷

5 种常见的 HTTP 状态码以及代表的意义:
200( OK):要求已成功,要求所希望的相应头或数据体将随此相应返回。 303( See Other):奉告客户端利用另一个 URL 来获取资源。 400( Bad Request):要求格式缺点。1)语义有误,当前要求无法被做事器理解。除非进行修正,否则客户端不应该重复提交这个要求;2)要求参数有误。 404( Not Found):要求失落败,要求所希望得到的资源未被在做事器上创造。 500( Internal Server Error):做事器碰着了一个未曾预见的状况,导致了它无法完成对要求的处理。
更多状态码:
100 => 正在初始化(一样平常是看不到的) 101 => 正在切换协议(websocket 浏览器供应的) 202 => 表示接管 301 => 永久重定向/永久转移 302 => 临时重定向/临时转移(一样平常用来做做事器负载均衡) 304 => 本次获取的内容是读取缓存中的数据,会每次去做事器校验 401 => 未认证,没有登录网站 403 => 禁止访问,没有权限 503 => 做事器超负荷(假设一台做事器只能承受 10000 人,当第 10001 人访问的时候,如果做事器没有做负载均衡,那么这个人的网络状态码便是 503)
5、请先容一下 XMLHTTPrequest工具及常用方法和属性(必会)XMLHTTPrequest 工具 Ajax 的核心是 JavaScript 工具 XmlHTTPRequest。该工具在 Internet Explorer 5 中首次引入,它 是一种支持异步要求的技能。简而言之,XmlHTTPRequest 使您可以利用 JavaScript 向做事器 提出要求并处理相应,而不壅塞用户。通过 XMLHTTPRequest 工具,Web 开拓职员可以在页面加载往后进行页面的局部更新
方法
open(String method,String url,boolean asynch,String username,String password)send(content)setRequestHeader(String header,String value)getAllResponseHeaders()getResponseHeader(String header)abort()
常器具体解析
open():该方法创建 HTTP 要求 第一个参数是指定提交办法(post、get) 第二个参数是指定要提交的地址是哪 第三个参数是指定是异步还是同步(true 表示异步,false 表示同步) 第四和第五参数在 HTTP 认证的时候会用到。是可选的
setRequestHeader(String header,String value):设置头(利用 post 办法才会利用到,get 方法并不须要调用该方法)
xmlHTTP.setRequestHeader("Content-type","application/x-www-form-urlencoded"); send(content):发送要求给做事器
如果是 get 办法,并不须要填写参数,或填写 null 如果是 post 办法,把要提交的参数写上去
常用属性 onreadystatechange:要求状态改变的事宜触发器(readyState 变革时会调用此方法),一样平常用于指定回调函数 readyState:要求状态 readyState 一改变,回调函数被调用,它有 5 个状态
0:未初始化 1:open 方法成功调用往后 2:做事器已经应答客户真个要求 3:交互中。HTTP 头信息已经吸收,相应数据尚未吸收。 4:完成。数据吸收完成 responseText:做事器返回的文本内容 responseXML:做事器返回的兼容 DOM 的 XML 内容 status:做事器返回的状态码 statusText:做事器返回状态码的文本信息
回调函数是什么 回调函数便是吸收做事器返回的内容!
1、创建 XMLHTTPRequest 工具,也便是创建一个异步调用工具. 2、创建一个新的 HTTP 要求,并指定该 HTTP 要求的方法、URL 及验证信息. 3、设置相应 HTTP 要求状态变革的函数. 4、发送 HTTP 要求. 5、获取异步调用返回的数据. 6、利用 JavaScript 和 DOM 实现局部刷新.
<script type="text/javascript"> var HTTPRequest; function checkUsername() { //创建 XMLHTTPRequest 工具 if(window.XMLHTTPRequest) { //在 IE6 以上的版本以及其他内核的浏览器(Mozilla)等 HTTPRequest = new XMLHTTPRequest(); }else if(window.ActiveXObject) { //在 IE6 以下的版本 HTTPRequest = new ActiveXObject(); } //创建 HTTP 要求 HTTPRequest.open("POST", "Servlet1", true); //由于我利用的是 post 办法,以是须要设置头 HTTPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //指定回调函数 HTTPRequest.onreadystatechange = response22; //得到文本框的数据 var name = document.getElementById("username").value; //发送 HTTP 要求,把要检测的用户名通报进去 HTTPRequest.send("username=" + name); } //吸收做事器相应数据 function response22() { //判断要求状态码是否是 4【数据吸收完成】 if(HTTPRequest.readyState==4) { //再判断状态码是否为 200【200 是成功的】 if(HTTPRequest.status==200) { //得到做事端返回的文本数据 var text = HTTPRequest.responseText; //把做事端返回的数据写在 div 上 var div = document.getElementById("result"); div.innerText = text; } } } </script>
7、Ajax 吸收到的数据类型有哪些,数据如何处理?(必会)
吸收到的数据类型
String /JSON 字符串/JSON 工具JSON 工具直接循环利用JSON 字符串转 JSON 利用String 直策应用如何处理数据
1、字符串转工具 第一种办法:eval();
var data = '{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}';eval('("+data+")');
第二种办法:JSON.parse();
var data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}';JSON.parse(data);
与 eval()差异:
eval()方法不会去检讨给的字符串时候符合 json 的格式~同时如果给的字符串中存在 js代码 eval()也会一并实行~比如:
var data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"alert(11)"},{"name":"王五","age":"11"}]}';
此时实行 eval 方法后会先弹出一个提示框输出 11 的字符串;
这时候利用 JSON.parse()就会报错,显示缺点信息为当前字符串不符合 json 格式;
即JSON.parse()方法会检讨须要转换的字符串是否符合 json 格式
比较而言 eval() 方法是很不屈安,特殊是当涉及到第三方时我们须要确保传给 eval()的参数是我们可以掌握的,不然里面插入比如 window.location~指向一个恶意的连接总的来说,还是推举利用 JSON.parse()来实现 json 格式字符串的解析
2、工具转字符串 JSON.stringify(json)
8、请阐明一下 JavaScript的同源策略(必会)同源策略是客户端脚本(尤其是 Javascript )的主要的安全度量标准。它最早出自 Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。 所谓同源指的是:协议, 域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。
9、阐述一下异步加载 JS(必会)异步加载的方案
动态插入 script 标签通过 Ajax 去获取 js 代码,然后通过 eval 实行script 标签上添加 defer 或者 async 属性创建并插入 iframe,让它异步实行 js参考资料 HTTPS://www.cnblogs.com/zichi/p/4597766.html HTTPS://www.cnblogs.com/xkloveme/articles/7569426.html
10、为什么会有跨域的问题涌现,如何办理跨域问题(必会)什么是跨域?
指的是浏览器不能实行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 javascript 施加的安全限定,防止他人恶意攻击网站
比如一个黑客,他利用 iframe 把真正的银行登录页面嵌到他的页面上,当你利用真实的用户名和密码登录时,如果没有同源限定,他的页面就可以通过 JavaScript 读取到你的表单中输入的内容,这样用户名和密码就轻松得手了。
办理办法
办理办法1 ----jsonp事理:动态创建一个 script 标签。利用 script 标签的 src 属性不受同源策略限定。由于所有的 src 属性和 href 属性都不受同源策略限定。可以要求第三方做事器数据内容。步骤:去创建一个 script 标签script 的 src 属性设置接口地址接口参数,必须要带一个自定义函数名 要不然后台无法返回数据。通过定义函数名去吸收后台返回数据//去创建一个 script 标签var script = document.createElement("script");//script 的 src 属性设置接口地址 并带一个 callback 回调函数名称script.src = "HTTP://127.0.0.1:8888/index.php?callback=jsonpCallback";//插入到页面document.head.appendChild(script);//通过定义函数名去吸收后台返回数据 function jsonpCallback(data){ //把稳 jsonp 返回的数据是 json 工具可以直策应用 //Ajax 取得数据是 json 字符串须要转换成 json 工具才可以利用。}办理办法2 ----CORS:跨域资源共享事理:做事器设置 Access-Control-Allow-OriginHTTP 相应头之后,浏览器将会许可跨域要求限定:浏览器须要支持 HTML5,可以支持 POST,PUT 等方法兼容 ie9 以上须要后台设置 Access-Control-Allow-Origin: //许可所有域名访问,或者 Access-Control-Allow-Origin: HTTP://a.com //只许可所有域名访问办理办法3 ----反向代理办理办法4 ----window+iframe