AJAX的简单介绍与使用

AJAX的简单介绍与使用

作用:AJAX可以在不刷新页面的情况下,请求服务器,页面局部刷新

一.AJAX请求服务器的步骤

1.创建XMLHttpRequest实例

XMLHttpRequest对象:具备和服务器通信的能力

2.设置请求报文

(1)请求行(请求方式/请求地址/协议版本号)
(2)请求头(将浏览器相关信息发送给服务器)
(3)请求主体(用于存放数据的)

3.接收服务器响应内容,用事件监听onreadystatechange
注意:get和post请求报文的区别

① get方式数据在请求行(拼接),请求主体为null;post方式数据在请求主体
② post请求头必须设置content-type属性

XMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");	// post请求设置content-type属性

二.原生JS的AJAX-get和AJAX-post

1.ajax-get
<body>
    <h1>ajax-get</h1>
    <input type="text"> <button>发送请求</button>
    <div class="info"></div>
    <script>
        // 点击按钮,获取输入框的值,通过ajax发送给后台
        document.querySelector('button').onclick = function () {
            var txt = document.querySelector('input').value;
            // 利用ajax发送数据给后台
            // 1.创建一个XMLHttpRequest对象
            var xhr = new XMLHttpRequest();

            // 2.设置请求报文
            // 2-1请求行	路径后面使用?拼接
            xhr.open('get', './ajax-get.php?name='+txt);
            // 2-2请求头
            xhr.setRequestHeader('content-type', 'text/html');
            // 2-3请求主体
            xhr.send(null);

            // 3.监听服务器响应
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var r = xhr.responseText;	// 返回的数据
                    // 显示
                    document.querySelector('.info').innerHTML = r;
                }
            }
        }
    </script>
</body>
2.ajax-post
<body>
    <h1>ajax - post</h1>
    <input type="text"> <button>发送请求</button>
    <div class="info"></div>
    <script>
        // 点击按钮,获取输入框的值,通过ajax发送给后台
        document.querySelector('button').onclick = function () {
            var txt = document.querySelector('input').value;
            //利用ajax向数据发送给后台
            // 1.创建一个XMLHttpRequest对象
            var xhr = new XMLHttpRequest();
            
            // 2.设置请求报文
            // 2-1请求行
            xhr.open('post', './ajax-post.php');
            // 2-2请求头
            //必须设置content-type属性
            xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
            // 2-3请求主体
            xhr.send('name=' + txt+'&sex=m');

            //3-监听服务器响应
            xhr.onreadystatechange = function () {
                if (xhr.readyState ==4 && xhr.status == 200) {
                    var r = xhr.responseText;	// 返回的数据
                    document.querySelector('.info').innerHTML = r;
                }
            }
        }
    </script>
</body>

三.AJAX的封装

1.jQuery封装AJAX

封装思路:
① 封装原因:提高代码的复用性
② 怎么封装:提取公共代码,变化部分成参数

// jq-ajax的详细语法格式
$('button').click(function () {
	$.ajax({
    	type: 'get',        //请求方式
    	url: './jqAajx.php',//请求地址
    	data: {name: 'zs'}, //传递的数据 内部进行转换 name=zs&age=18
    	// timeout: 2000,      //超时时间,等待服务器响应时间,超过指定时间,自动终止请求
    	dataType:'json',    //数据类型,告诉$.ajax返回的数据 以哪种类型进行处理 'text', 'json', 'xml', 'script'
    	//如果设置了dataType: 'json', 插件内部会自动将json数组转成js对象或者数组
    	beforeSend: function () {
    		// alert(1);
    		//在请求发前,做一些准备工作,判断数据是否合理
    	}, //请求发送之前
    	success: function (info) { 
            //用于渲染
    		console.log(info);    
        	// alert(2);                
    	}, //服务器成功响应的回调函数
    	error: function () {
    		// alert(3);
        	console.log('请求出错了');                    
    	}, //请求出错的回调函数
    	complete: function () {
    		// 做一些收尾工作,样式重置
        	// alert(4);
     	} //请求完成的回调函数
	})
});
2.promise利用jq-ajax封装

(1)Promise是一个构造函数
(2)() 参数里是一个回调函数
resolve : fn =>成功操作 调用resolve
reject : fn => 失败操作 调用 reject
(3)Promise里面放一个异步操作
① 假如异步操作成功 => 调用 resolve => 走then => 传参数
resolve(‘成功的信息’) => 传递给then的参数
② 假如异步操作失败 => 调用 reject => 走 catch =>传参数
reject(‘这是一条错误信息’) => 传递给catch的参数

function fetch(options){
	const p = new Promise((resolve, reject) => {
		$.ajax({
			url : options.url;		// 接口地址
			type : options.type;	// 请求方式
			data : options.data || {};		// 参数
			dataType : 'json';		// 数据类型
			success : resolve;		// 成功回调
			error : reject;			// 失败回调
		})
	})
	return p	// 返回值Promise对象
}


// promise的使用,走then或者走catch
fetch(obj).then( res => { 
  console.log('then被调用了:',res);
}).catch( err => { 
    console.log('catch 被调用了:',err);
  })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值