原生Ajax入门,看这一篇事半功倍

Ajax概念

Ajax(Asynchronous JavaScript + XML):异步JavaScript和XML,是为了网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面;

Ajax的使用步骤

1.创建请求对象

var xhr=new XMLHttpRequest();

这里命名尽量用xhr

2.调用open方法

open方法中需要传入两个参数,分别为请求方式和请求地址

//请求方式为get
xhr.open("get","请求地址?需要请求的数据")
//请求方式为post
xhr.open("post","请求地址")

3.设置请求头(可选)

这里如果请求方式为post需要设置请求头

xhr.setRequestHeader('Content-type","application/x-www-form-urlencoded")

为什么要加请求头
默认情况下, 服务器对POST请求和提交web表单的请求并不会一视同仁. 因此, 服务器端必须有程序来读取发送过来的原始数据, 并从中解析出有用的部分

4.监听响应事件

xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
	//获取响应体
	xhr.responseText
	//请求xml
	xhr.responseXML
	

补充
  1. 这里为什么不用onload事件
  • onload事件在IE8及以下不兼容,监控不到
  1. 为什么要写xhr.readyState==4判断条件
    要了解这个需要先知道XMLHttpRequest.readyState 属性返回一个 XMLHttpRequest 代理当前所处的状态。并且XHR 代理总是处于下列状态中的一个:
  • 0 UNSENT
    XMLHttpRequest 代理已被创建, 但尚未调用 open() 方法。
    -1 OPENED
    open() 方法已经被触发。在这个状态中,可以通过 setRequestHeader() 方法来设置请求的头部, 可以调用 send() 方法来发起请求。
  • 2 HEADERS_RECEIVED
    send() 方法已经被调用,响应头也已经被接收。
  • 3 LOADING
    响应体部分正在被接收。如果 responseType 属性是“text”或空字符串, responseText 将会在载入的过程中拥有部分响应数据。
  • 4 DONE
    请求操作已经完成。这意味着数据传输已经彻底完成或失败。
    注意: 在IE中,状态有着不同的名称,并不是 UNSENT,OPENED , HEADERS_RECEIVED , LOADING 和 DONE, 而是 READYSTATE_UNINITIALIZED (0),READYSTATE_LOADING (1) , READYSTATE_LOADED (2) , READYSTATE_INTERACTIVE (3) 和 READYSTATE_COMPLETE (4) 。
    所以在这里我们一般直接控制条件等于4,一方面是为了兼容IE,另外的一个方面是因为当状态为4的时候是确定数据完全传输完成
  1. 为什么要有status条件
  • 首先只读属性 XMLHttpRequest.status 返回了XMLHttpRequest 响应中的数字状态码。status 的值是一个无符号短整型。
  • 在请求完成前,status的值为0。值得注意的是,如果 XMLHttpRequest 出错,浏览器返回的 status 也为0。
  • status 200 代表一个成功的请求。如果服务器响应中没有明确指定status码,XMLHttpRequest.status 将会默认为200。
  • 常见的几种状态
    200:请求成功
    404:没有发现文件、查询或url
    400~499:客户端问题
    500 :服务端问题
    控制为200这样就可以确定请求成功
  1. 当需要得到的部分是xml多次获取不到或者获取为null时,可能是需要转换
// 1.创建转换对象
var parser=new DOMParser();
//2.调用转换方法
var obj=parser.parserFromString(需要转换的内容,需要转换的类型)
  1. 当然我们也需要熟悉JSON的两种方法
  • JSON.parse() 将JSON数据转换为数组或者对象
  • JSON.stringify() 将对象或者数组转换为JSON对象

Ajax和form的提交

  1. ajax在提交、请求、接收时,都是异步进行,网页不需要刷新,只刷新页面局部,不关心也不影响页面其他部分的内容。
    Form提交则是新建一个页面,哪怕是提交给自己本身的页面,也需要刷新,为了维持页面用户对表单的状态改变,要在控制器和模板之间传递更多参数以保持页面状态。
  2. ajax提交时,是在后台新建一个请求。
    Form却是放弃本页面,然后再请求。
  3. ajax必须要用js来实现,存在调试麻烦、浏览器兼容问题,而且不启用js的浏览器,无法完成操作。
    Form表单是浏览器自带的,无论是否开启js,都可以提交表单。
  4. ajax在提交、请求、接收时,整个过程都需要使用程序来对其进行数据处理。
    Form表单提交,是根据表单结构自动完成,不需要代码干预。用submit提交。

Ajax中JSON和XML

JSON

概念
  • JSON 英文全称 JavaScript Object Notation
  • JSON 是一种轻量级的数据交换格式。
  • JSON是独立的语言 *
  • JSON 易于理解。
语法
  • 数据为 键/值 对。
  • 数据由逗号分隔。
  • 大括号保存对象
  • 方括号保存数组

xml

概念
  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。

两者之间的差别

  • JSON 是一个轻量级的数据格式 XML是重量级
  • JSON 相对于 XML而言,数据体积小,传递的速度比较快。
  • JSON与javascript的交互更加方便,更容易解析处理。
  • JSON对数据的描述性比 XML 差。
  • JSON 的速度要远远快于 XML。
  • JSON仅支持UTF-8编码;XML支持各种编码。
  • JSON的安全性较低;XML比JSON更安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值