[Ajax] Ajax的基本用法

同步交互与异步交互

在这里插入图片描述

 

同步交互是什么

所谓同步交互,就是指发送一个请求,需要等待返回,然后才能够发送下一个请求。

同步交互相当于排队,轮到下一个的情况会因为前一个而有所不同。

在这里插入图片描述

第二次请求必须等待第一次请求结束之后才可以开始。

 

异步交互是什么

所谓异步交互,就是指指发送一个请求,不需要等待返回,随时可以再发送下一个请求。

同步交互与异步交互的区别在于同步交互需要等待结果,而异步交互不需要等待。

在这里插入图片描述

第二次请求不需要等待第一 次请求结束之后就可以开始。

 

异步交互的优势和劣势
优势劣势
用户操作无须像同步交互必须等待结果。异步交互破坏了浏览器原有的前进和后退机制。
异步交互只需与服务器端交换必要的数据内容,而不是将所有数据全部更新。如果后面逻辑的执行依靠前面逻辑执行的结果的话,异步交互可能会造成问题。
异步交互对带宽造成的压力相比同步交互更小。Ajax实现异步交互对搜索引擎支持较弱。
通过Ajax实现异步交互不需要任何第三方插件,只要浏览器支持JavaScript语言即可实现。Ajax实现异步交互会引起一些Web安全问题,例如SQL注入攻击、跨站点脚本攻击等问题。

 
 

Ajax是什么

参考Ajax官方文档

Ajax是什么
  • Ajax = 异步 JavaScriptXML
  • Ajax是是指一种创建交互式网页应用的网页开发技术
  • Ajax 它是与服务器交换数据的技术,在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),它在不重载全部页面的情况下,实现了对部分网页的更新。

 

Ajaxi涉及的技术
  • HTML页面
  • Cascading Style Sheets ( CSS )
  • JavaScript脚本语言
  • Document Object Model ( DOM)
  • XML
  • XMLHttpRequest对象

 

Ajax的工作原理

在这里插入图片描述

Ajax异步交互的整体执行流程过程中,HTML页面是不被更新的。只是更新部分数据内容。

 

Ajax的核心对象

核心就是XMLHttpRequest对象,该对象为客户端提供了在客户端和服务器之间传输数据的功能。

XMLHttpRequest对象提供了一个通过URL来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。

XMLHttpRequest对象最初由微软设计,随后被Mozilla、Apple和Google采纳。如今,该对象已经被W3C组织标准化。通过该对象,可以很容易地得到一个URL上的资源数据。尽管名字里有XML,但XMLHttpRequest对象可以得到所有类型的数据资源,并不局限于XML格式的数据。

 
 

实现Ajax异步交互

实现Ajax的执行步骤
  1. 创建Ajax的核心对象XMLHttpRequest对象
  2. 通过XMLHttpRequest对象的open(方法与服务器端建立连接
  3. 构建请求所需的数据内容,并通过XML HttpRequ Jest对象的send()方法发送给服务器端
  4. 通过XMLHttpRequest对象提供的onreadystatechange事件监听服务器端的通信状态
  5. 接收并处理服务器端向客户端响应的数据结果
  6. 将处理结果更新到HTML页面中

 

创建Ajax的核心对象
function createXMLHttpRequest(){
	var httpReguest;
	if (window.XMLHttpRequest) {//适用于Chrome, Firefox, Safari, ..
    	httpRequest = new XMLHttpRequest();
    } else if(window.ActiveXObject) {//适用于IE浏览器
    	try {
    		httpRequest = new ActiveXObiect("Msxml2.XMLHTTP");//IE 7+
    	} catch(e){
    		try {
    			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");// IE 6- 
    		} catch(e){}
        }
    }
    return httpRequest;
}

 

建立Ajax异步请求连接
  • 创建XMLHttpRequest对象
var xhr = createXMLHttpRequest()
  • 调用XMLHttpRequest对象的open()方法

    • 作用

      • 与服务器端建立连接
    • open(method,url)方法

      • method -表示当前的请求方式
        • 常见的请求方式为GETPOST
      • url -表示当前请求的服务器端地址链接
xhr.open('get/post','地址');
  • 调用XMLHttpRequest对象的send()方法

    • 作用

      • 将客户端页面的数据发送给服务器端
    • send()方法

      • 如果不传递任何数据内容时 - 向该方法传递 null
xhr.send(null)
  • 利用XMLHttpRequest对象的onreadystatechange事件
    • 作用
      • 用于监听服务器端的通信状态
    • 服务器端的通信状态中 - 存在着处理完毕(信号)
      • 接收服务器端返回的处理结果
xhr.onreadystatechange = function () { // 监听服务器端的通信状态
    if(xhr.readyState === 4){
		console.log(xhr.responseText);
    }
}

补充:

readyState 属性(表示服务器端的通信状态)
 

状态描述
0(未初始化)UNSEND代理对象已经被创建,但尚未调用open()方法
1(载入)OPENEDopen()方法已经调用,建立与服务端口特定的链接
2(载入完成)HEADERS_RECEIVEDsend()方法已经被调用,并获得了状态行和响应头
3(交互)LOADING响应体下载中,可能已经下载部分数据了
4(完成)DONE响应体下载完成,可以直接使用responseText
  • 将接收到的结果更新到HTML页面

 
 

细节补充
  • 利用XMLHttpRequest对象onreadystatechange事件
xhr.onreadystatechange = function () { // 监听服务器端的通信状态
	console.log(xhr.readyState);
    if(xhr.readyState === 4){
    	console.log(xhr.status);
    	if(xhr.status === 200){
    		console.log(xhr.responseText);
    	}
    }
    if(xhr.readyState === 4 && xhr.status === 200){
        /*
            接收服务器端响应的结果
                responseText属性- 专门接收字符串 类型的结果内容
                responseXML属性 - 专门接收XML数据格式的结果内容
        */
    	console.log(xhr.responseText);
    }
}

补充:

status 属性(得到当前请求之后的响应状态码)
 

响应状态码状态码说明
100客户必须继续发出请求
101客户要求服务器根据请求转换HTTP协议版本
200交易成功
201提示知道新文件的URL
202接受和处理、但处理未完成
203返回信息不确定或不完整
204请求收到,但返回信息为空
205服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206服务器已经完成了部分用户的GET请求
300请求的资源可在多处得到
301删除请求数据
302在其他地址发现了请求数据
303建议客户访问其他URL或访问方式
304客户端已经执行了GET,但文件未变化
305请求的资源必须从服务器指定的地址得到
306前一版本HTTP中使用的代码,现行版本中不再使用
307申明请求的资源临时性删除
400错误请求,如语法错误
401请求授权失败
402保留有效ChargeTo头响应
403请求不允许
404没有发现文件、查询或URl
405用户在Request-Line字段定义的方法不允许
406根据用户发送的Accept拖,请求资源不可访问
407类似401,用户必须首先在代理服务器上得到授权
408客户端没有在用户指定的饿时间内完成请求
409对当前资源状态,请求不能完成
410服务器上不再有此资源且无进一步的参考地址
411服务器拒绝用户定义的Content-Length属性请求
412一个或多个请求头字段在当前请求中错误
413请求的资源大于服务器允许的大小
414请求的资源URL长于服务器允许的长度
415请求资源不支持请求项目格式
416请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500服务器产生内部错误
501服务器不支持请求的函数
502服务器暂时不可用,有时是为了防止发生系统过载
503服务器过载或暂停维修
504关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505服务器不支持或拒绝支请求头中指定的HTTP版本
  • 调用XMLHttpRequest对象的send()方法
    • 参数data
      • 表示要向服务器端发送的请求数据
    • 请求方式
      • 如果当前的请求方式为GET的话 - send()方法中只能传递null值
        • 将请求数据添加到请求地址链接中
    • 两种情况
      • 发送数据 - user=zhangwuji&pwd=123456
        • 请求数据的格式
          • 如果具有多个请求数据的话,之间使用"&"进行分隔
          • 每个数据格式 -> name=value
      • 不发送数据 - send()方法中必须传递null值,而不能为空
xhr.open('get','地址?user=zhangwuji&pwd=123456');
xhr.send("user=zhangwuji&pwd=123456")

GET请求的地址后面要手动添加 ?内容
POST请求的地址不用手动添加 ?内容

 
 

GET与POST请求方式

方法描述
open(method,url,async)规定请求的类型、URL以及是否异步处理请求.
send(string)将请求发送到服务器.

 

GET请求方式
  • 将构建的请求数据添加到open()方法中的url地址中

  • 将发送请求数据的send()方法中参数设置为null值

 

POST请求方式
  • 调用send()方法之前,需要通过XMLHttpRequest对象的setRequestHeader()方法设置请求头信息。

  • 通过XMLHttpReguest对象的send()发送请求数据。

//设置请求头部信息
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')

 

get与post的区别

GET请求的特点:

  • GET 请求可被缓存

  • GET 请求保留在浏览器历史记录中

  • GET 请求不应在处理敏感数据时使用

  • GET 请求有长度限制

  • GET 请求只应当用于取回数据

  • GET 请求可被收藏为书签

POST请求的特点:

  • POST 请求不会被缓存

  • POST 请求不会保留在浏览器历史记录中

  • POST 请求对数据长度没有要求

  • POST 请求不能被收藏为书签

区别从GET和POST的特点中很好发现

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值