Ajax的相关知识学习

举报
多米诺的古牌 发表于 2021/08/23 17:45:07 2021/08/23
【摘要】 1.Ajax实现步骤1.1 创建XmlHttpRequestvar xhr = new XmlHttpRequest;1.2 使用open方法,设置初始化参数eg:xhr.open(方法类型("get、post)","请求地址",boolean(true为异步,false同步));如果为post的时候,还需要设置请求头eg:xhr.setRequestHeader("Content-type...

1.Ajax实现步骤

1.1 创建XmlHttpRequest

var xhr = new XmlHttpRequest;

1.2 使用open方法,设置初始化参数

eg:xhr.open(方法类型("get、post)","请求地址",boolean(true为异步,false同步));

如果为post的时候,还需要设置请求头

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

1.3 使用send方法,发送设置好的请求

eg:xhr.send();当请求方式为get的时候,如果有需要传递参数,应放在open方法的请求地址后面用?拼接上需要传递的参数;如果是请求方式是post的时候,如果需要传递参数,应放在在send(XXX)方法中;

1.4 使用onreadystatechange属性,接收响应数据

xhr.onreadystatechange = function(){...}当readystate属性发生变化的时候,会触发这个设置的函数,并且执行里面的业务;当readystate状态为4的时候为数据会被完整传输过来,并且带着可使用的数据传递过来,为xhr对象在http请求中的最后一个状态;state的属性为一种标准的HTTP返回代码,如200代表成功,404代表服务器找不到请求的网页;

2.JQuery中实现Ajax

2.1 引入JS时的注意事项

2.1.1 引入的js文件执行是有先后顺序的,当放在头部的时候,如果js中的业务逻辑是控制DOM节点的相关操作,而此时DOM节点还未加载,则js的业务逻辑不会生效;当引入的js文件放在底部的时候,因为DOM节点已经加载,所以js中的业务逻辑会生效,并且会按照js引入的顺序进行加载。

2.1.2 当js引入放在头部的时候,怎么处理dom未加载的情况?可以使用read方法进行业务处理,设置为当DOM节点已经加载好后再执行业务代码

eg:$(document).ready(function(){$(''#val").html("在val节点加载后增加此内容")(相关业务代码)})

等价于:$(function(){$(''#val").html("在val节点加载后增加此内容")(相关业务代码)})

2.2 get、post、ajax方法

2.2.1 get方法的表达式为$.get(url,data,callback,type),其中url为请求地址,data是请求参数(可以是json也可以是字符串,如果没有可以省略),callback是请求成功时候的回调函数,type是请求返回数据的类型,分为json、script、html、text、xml等;

eg:$.get("/XXX",function(){XXX},"script");

2.2.2 post方法的表达式为$.get(url,data,callback,type),和get方法基本相似,在请求发出去的时候请求参数是放在请求体之中

2.2.3 ajax方法的表达式为$.ajax(option),其中option是json格式的配置参数,用于设置ajax请求

eg:$.ajax({

            type:"get或者post",
            url:"请求地址",

            data:发送到服务器的数据,将自动转换为请求字符串格式,GET 请求中将附加在 URL 后,如果是数组形式的数据会自动拆分并且用&进行拼接

            contentType:"application/x-www-form-urlencoded发送信息至服务器时内容编码类型"
            dataType:"请求返回数据的类型",
            success:function(data){相关成功后的业务逻辑},
            error:function(e){失败后的业务逻辑}
        });

3 适配兼容问题

3.1 适配浏览器兼容

var xhr = null;
if(window.XMLHttpRequest){
     xhr = new XMLHttpRequers;
}else{
     xhr = new ActiveOject("Microsoft.XMLHTTP");
}

3.2 适配get和post请求

var defaultParm ={
	type:"get",
	url: "#",
	data: {},  
	async: true, //异步
	success:function(){}
}

//通过循环,将默认值赋值进去,如果本来有值,则使用传过来的参数的值,这样就可以确保整个对象都有值;
for(var key in option){
	defaultParm[key] = option[key];
}

var parm = "";
//参数的遍历和拼接
for(var key in defaultParm.data){
	parm += k + "=" + defaultParm.data[k] + "&";
}

//处理结尾拼接&
parm = parm.substr(0,parm.length - 1);

//get和post请求的适配,get是将参数拼装在url后面,post是将参数放在send中发送
if(defaultParm.type == "get"){
	xhr.open(defaultParm.type,defaultParm.url+ "?" + parm,defaultParm.async);
	xhr.send();
}else{
	xhr.open(defaultParm.type,defaultParm.url,defaultParm.async);
	xhr.setRequestHeader("COntent-type","application/x-www-form-urlencoded");
	xhr.send(parm);
}
//监听状态变化,并配置成功返回的函数
xhr.onreadystatechange = function(){
	if(xhr.readState == 4){
		if(xhr.status == 200){
			defaultParm.success(xhr.responseText);
		}
	}
}

3.3 app.js中配置服务器访问的地址

app.use(async function(ctx){
	if(xtx.path == "/请求地址"){
		//相关业务代码
                //ctx.request.body.参数 ,表现其中的参数
                //ctx.body = XXX,返回的数据

	}
})


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。