Ajax实现原理是什么? 如何实现

介绍Ajax:

  1. Ajax全称:Async JavaScript and Xml (异步JavaScript和XML)
  2. 是一种交互式网页应用的开发技术,不加载页面的情况下,与服务器实现交互数据
  3. 简单的来说通过XmlHttprequest对象向服务器发送异步请求,获取数据后。使用JavaScript操作dom元来刷新页面

创建:

  • 创建 ajax 对象以后,我们就使⽤ ajax 对象的⽅法去发送请求和接受响应

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L09yaWVudGFsXw==,size_16,color_FFFFFF,t_70

1.创建实例

 // 创建实例化 xhr异步对象
        const xhr = new XMLHttpRequest()

通过xhr我们就可以发送ajax请求了

配置属性:

  • xhr.status :服务器的HTTP状态码 如(404 : 未找到文件 , 200: 成功)
  • ~.responseText:  服务器响应  返回的数据        
  • ~.statusText: 服务器返回的状态文本信息
  • ~.onreadyStateChange :  事件监听服务端与你的通信状态 

                他是监听 readyState  的状态,只要readyState  发生变化就会触发这个事件   

                  一般我们会监听  readyState  是不是===4  因为===4 代表成功

  • ~.readyState : 请求的状态,有四个状态 

        0 : xhr被创建 但是没被调用open()方法   

        1:open()方法被调用,建立连接,

        2:send()方法被调用,并且已经可以获取状态码和响应头 

        3:响应体下载中 responseText 属性已包含部分数据 

        4:完成 可以使用responseText

2.建立连接


open ⽅法有三个参数
第⼀个   请求⽅式 
第⼆个   url 地址
第三个   是本次请求是否异步,默认为true 表示异步,false 同步
xhr.open('⽅式', '地址', 是否异步)

3.发送请求

//发送请求 
xhr.send() 

4.onreadyStateChange 监听通信状态

xhr.onreadystatechange = function () {
            //是否发送成功,
            if (xhr.readyState == 4) {
                //200代表后台响应成功 成功之后我们就可以通过responseText拿取数据
                if (xhr.status == 200) {

                    console.log(xhr.responseText)
                }
                //如果没有成功,就获取错误状态码
                else {
                    console.log(xhr.status);
                }
            }
        }

5.发送请求时携带参数

5.1, get与post的区别 

  • get参数会在url地址显示,post不会
  • get相比post更快,更稳定
  • post可以向服务器发送大量数据,没有数据限制

5.2,get传参 直接在url后面进行拼接 

const xhr = new XMLHttpRequest()
// 直接在地址后面加一个 ?,然后以 key=value 的形式传递 
// 多个数据用&分割
xhr.open('get', './wqh.text?a=100&b=200')
xhr.send()

5.3,post请求传参是携带在请求体中的

 POST发送请求必须设置在 setRequestHeader 请求头
                    application/x-www-form-urlencoded    表单字符类型
                    multiline/form-data      表单类型
                    application/json   json类型

const xhr = new XMLHttpRequest()


xhr.open('post', './wqh.text')


//Content-type设置类型
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");


//以key=value&key=value形式发送
xhr.send('key=value&key=value') 

6,简单封装下-仿jq中$.ajax

          /*
		    type  请求方式
		    url   请求url路径
		    data  要发送的数据
		    success 成功以后执行的函数
		    error   失败以后执行的函数
            .toLowerCase()将字符串转换成小写 对其他类型不影响
		   */

		function $ajax({
			type = "get",
			url,
			data,
			success,
			error
		}) { 
                //当type不传值的时候给他默认值get

			xhr = new XMLHttpRequest(); // 实例化xhr对象

			/**
			 * 如果请求方式为get 并且data参数存在的话
			 * 我们就要和地址进行拼接  因为get传参方式是在url后边拼接 
			 * 我们要对他进行处理
			 **/

			if (type.toLowerCase() == "get" && data) {
				url += "?" + querystring(data);
			}

			xhr.open(type, url, true);

			if (type.toLowerCase() == "get") {
				xhr.send();
			} else {
				//设置提交数据格式 :content-type
				xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");

				//如果data有数据的话 我们就在将参数放到send中 没有的话就直接请求
				data ? xhr.send(querystring(data)) : xhr.send();
			}
                //监听通信
			xhr.onreadystatechange = function () {
				if (xhr.readyState == 4) {
					if (xhr.status == 200) {
						if (success) {
							success(xhr.responseText); //将接收的数据抛出
						}
					} else {
						if (error) {
							error("Error:" + xhr.status); //将错误的状态码抛出
						}
					}
				}
			}
		}

		function querystring(obj) { //querystring函数就是对我们接收data对象进行处理
			var str = '';
			for (var attr in obj) { //首先循环obj这个对像
				str += attr + "=" + obj[attr] + "&"; //拿到里边的 键值 以 = 号进行拼接 在末尾加上 & 
			}
			return str.substring(0, str.length - 1); //这一步是因为拼接完成的str 末尾会有一个& 
		}

		window.onload = function () {
			var aBtns = document.getElementsByTagName("button");

			aBtns[0].onclick = function () {
				$ajax({
					url: "abc.txt",
					data: {
						username: "老六",
						age: 66,
						password: "sixsix"
					},
					success: function (result) {
						alert("GET请求到的数据:" + result);
					},
					error: function (msg) {
						alert("GET请求数据错误:" + msg);
					}
				})
			}

			aBtns[1].onclick = function () {
				$ajax({
					type: "post",
					url: "http://localhost:3000/data",
					// data: {
					// 	username: "小王",
					// 	age: 18,
					// 	password: "200202"
					// },
					success: function (result) {
						alert("POST请求到的数据:" + result);
					},
					error: function (msg) {
						alert("POST请求数据错误:" + msg);
					}
				})
			}
		}

Ajax(Asynchronous JavaScript and XML)是一种在Web应用程序中创建交互式用户体验的技术。其原理是通过JavaScript在不重新加载整个页面的情况下,向服务器请求数据并更新页面的部分内容。 具体实现步骤如下: 1. 创建 XMLHttpRequest 对象 在 JavaScript 中,使用 XMLHttpRequest 对象来实现 Ajax。创建 XMLHttpRequest 对象的代码如下: ``` var xhr = new XMLHttpRequest(); ``` 2. 发送请求 使用 XMLHttpRequest 对象的 open() 和 send() 方法来发送请求。代码如下: ``` xhr.open('GET', 'url', true); xhr.send(); ``` 其中,第一个参数是请求类型(GET 或 POST),第二个参数是请求地址,第三个参数是指定请求是否异步执行。 3. 接收数据 当服务器响应请求时,会触发 XMLHttpRequest 对象的 onreadystatechange 事件。通过判断 readyState 属性和 status 属性的值,可以确定服务器响应的状态。如果响应成功,可以通过 responseText 或 responseXML 属性获取服务器返回的数据。代码如下: ``` xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var data = xhr.responseText; // 处理返回的数据 } } ``` 4. 处理数据 根据服务器返回的数据格式,使用 JavaScript 对返回的数据进行处理,并将结果更新到页面上。 以上就是 Ajax 的基本原理和实现步骤。需要注意的是,Ajax 可能会存在跨域问题,需要在服务器端进行相应的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值