1.什么是ajax?ajax作用是什么
异步的javascript和xml Ajax是一种用于快速创建动态网页得技术。 ajax用来和后台交互。
2.原生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 = fuction(){if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {}}
3.ajax的优点
- 无刷新更新数据
- 异步与服务器通信
- 前端后后端负载平衡(ajax按需请求数据)
- 基于标准被广泛支持
-
4.ajax的缺点
ajax干掉了Back和收藏书签功能,即对浏览器机制的破坏。
- ajax的安全问题
- 因为网络延迟需要给用户提供必要提示
5.XMLhttpRequest属性
onreadystatechange
一个javascript函数对象,当readyState属性发生改变时会调用它。回调函数会在user interface线程中执行。
readyState
HTTP的请求状态,当一个XMLHttpRequest对象创建时,这个属性的值从0开始,直到接收到完整的HTTP响应,这个值增加到4。
五个状态中每一个都有相关联的非正式的名称,下表列出了状态、名称和含义:
| 状态 | 名称 | 描述 |
|---|---|---|
| 0 | Uninitialized | 初始化状态。XMLHttpRequest对象已经创建或被abortion()方法重置。 |
| 1 | Open | open方法已调用,但是send方法未调用。请求还没有被发送。 |
| 2 | Sent | sned方法已调用,HTTP请求已经发送到Web服务器。为接收到响应 |
| 3 | Receiving | 所有响应头都已经接收到。响应体开始接收但未完成。 |
| 4 | Loaded | HTTP响应已经完全接收 |
readyState的值不会递减,除非当一个请求在处理过程中的时候调用了abort()或open方法。每次这个属性的值增加的时候,都会触发onreadystatechange事件句柄。
responseText
目前为止服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。
如果readystate小于3,这个属性就是一个空字符串。当readystate为3,这个属性返回目前已经接收的响应部分。如果readystate为4.这个属性保存了完整的响应体。
如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8
responseXML
对请求的响应。解析为XML并作为Document对象返回。
status
由服务器返回的http状态码,如200表示成功。而404表示“Not Found”错误。当readyState小于3的时候读取这个属性会导致一个异常。
statusText
这个属性用名称而不是数字指定了请求的HTTP的状态码。也就是说,当状态为200的时候它是“ok“,当状态为404的时候它是一个”Not Found“。和status属性一样,当readystate小于3的时候读取这一属性会导致一个异常。
6.XMLHttpRequest方法
abort()
取消当前响应,关闭连接并且结束任何未决的网络活动。
这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。
getAllResponseHeaders()
把 HTTP 响应头部作为未解析的字符串返回。
如果 readyState 小于 3,这个方法返回 null。否则,它返回服务器发送的所有 HTTP 响应的头部。头部作为单个的字符串返回,一行一个头部。每行用换行符 “\r\n” 隔开。
getResponseHeader()
返回指定的 HTTP 响应头部的值。其参数是要返回的 HTTP 响应头部的名称。可以使用任何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。
该方法的返回值是指定的 HTTP 响应头部的值,如果没有接收到这个头部或者 readyState 小于 3 则为空字符串。如果接收到多个有指定名称的头部,这个头部的值被连接起来并返回,使用逗号和空格分隔开各个头部的值。
open()
初始化一个请求. 该方法用于JavaScript代码中;如果是本地代码, 使用 openRequest())方法代替.
注意: 在一个已经激活的request下(已经调用open()或者openRequest()方法的request)再次调用这个方法相当于调用了abort()方法。
参数method
请求所使用的HTTP方法; 例如 “GET”, “POST”, “PUT”, “DELETE”等. 如果下个参数是非HTTP(S)的URL,则忽略该参数.url
该请求所要访问的URLasync
一个可选的布尔值参数,默认为true,意味着是否执行异步操作,如果值为false,则send()方法不会返回任何东西,直到接受到了服务器的返回数据。如果为值为true,一个对开发者透明的通知会发送到相关的事件监听者。这个值必须是true,如果multipart 属性是true,否则将会出现一个意外。user
用户名,可选参数,为授权使用;默认参数为空string.password
密码,可选参数,为授权使用;默认参数为空string.
send()
发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体。
setRequestHeader()
向一个打开但未发送的请求设置或添加一个 HTTP 请求(设置请求头)。
参数header
将要被赋值的请求头名称value
给指定的请求头赋的值
7.ajax请求和普通请求的区别
两者本质区别:
ajax通过XMLHttpRequest对象请求服务器,服务器接收请求返回数据实现刷新交互。
普通http请求通过httpRequest对象请求服务器,服务器接收请求返回数据需要页面刷新。
ajax’请求头会多一个x-requested-with参数,值为XMLHttpRequest
