优化封装方案实现| 学习笔记

简介: 快速学习优化封装方案实现。

开发者学堂课程【Ajax 前端开发入门与实战优化封装方案实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/595/detail/8537


优化封装方案实现

 

目录

一、案例分步

二、实例整体

 

一、案例分步

下面把这个 myAjax2 的方法完善起来,通过以下代码我们将 defaults 中的默认属性覆盖掉。

function myAjax2(obj)  {

var defaults = {

type:"get",

url:"#”,

dataType:"json",

data:{ }

};

//obi 中的属性,覆盖到 defaults 中的属性

//1、如果有一些属性只存在 obj 中, 会给 defaus 中增加属性

//2、如果有一些属性在 obj 和 defaults 中都存在,会将 defaults 中的默认值覆盖

//3、如果有一些属性只在 defaults 中存 的中不存在、在 obj 中不存在,这时候defaults 中将保留预定义的

for(var key in obj){

Defaults[key]=obj[key]

}

2.四步骤

步骤一:串联对象 var xhr=null 后进行一个条件判断 if(window 是否有XMLHttpRequest 这个选项,如果有的话则 xhr=new XMLHttpReques, 完整的步骤一展示为

for(var key in obj) {

defaults[key]= obj[key];

}

var xhr = null;

if(window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else {

xhr = new ActiveXOBject(“Microsoft.XMLHTTP”)

}

在此步骤中我们没有使用到 defaults 中任何一个参数,此参数已经在for循环中与obj 结合。

步骤二:此时需要使用到 defaults 中参数

选择 xhr,open 这个方法,在 open 这个方法中,我们需要传入请求类型,请求地址以及是否为同步或异步。

请求类型:defaults:type(可能有两种情况,一个是 obj 中没有 type 这个属性,于是使用 type=get, 另一个为在 obj 中显示传递一个类型 post,经过defaults[key]= obj[key] 这个代码之后成为 post 请求。);

defaults.url;defaults.async

xhr.open(defaults.type,defaults.url,defaults.async);

使用变化后的 defaults 进行 Ajax 的第二个步骤准备发送这个功能的实现。

由于请求类型分为 get 和 post,这对 url 有一定的影响,所以需要进行一个条件判断

//得到params

// data:{

// uname: “zhangsan"

//  age:"18"

// } //  uname-zhangsan&age=18

var params =“ ”

for(var attr in defaults.data) {

params +=attr +“=”+defaults;data[attr] +“&”;

}

注:在进行便利的时候:

// } //  uname-zhangsan&age=18

var params =“ ”

for(var attr in defaults.data) {

params +=attr +“=”+defaults;data[attr] +“&”

当这个步骤结束时我们需要做一个条件判断:

params= params.substring(image.png,params.length-1)

}

if(defaults.type get==”get“) {

defaults.url +=“?” params;

}

步骤三:xhr.send(),再做一个条件请求,因为 post 与 get 不一样

if(defaults.type==“ get") {

xhr.send(null);

} else if(defaults,type==“ post”) {

xhr.setReguestHeader(“ContentType",“application/x-www-form-urlencoded”);

xhr.send(params);

}

这个步骤结束后 get 和 post 请求就考虑的差不多了

步骤四:获取数据

if(defaults.async) {

xhr.onreadystatechange = function(){

if(xhr.readyState==4){

if(xhr.status == 200) {

var result - null:

if(defaults.dataType==“json”){

result=xhr.responseText;

result=JSON.parse(result);

} else if(defaults.datalype == xml"){

result=xhr.responseXML;

}else {

result=xhr.responseText;

}

defaults.success(result)

}

}

}

}else{

if(xhr.readyState==4){

if(xhr.status == 200) {

var result - null:

if(defaults.dataType==“json”){

result=xhr.responseText;

result=JSON.parse(result);

} else if(defaults.datalype == xml"){

result=xhr.responseXML;

}else {

result=xhr.responseText;

}

defaults.success(result)

}

}


二、实例整体:

Obj = {

ur1:“xxx”

type:“post”

dataType:“json”

data:{

uname:“zhangsan”,

age:“18”

},//uname=zhangsan&age=18

success:function

};

function myAjax2(obj)  {

var defaults = {

type:"get",

url:"#”,

dataType:"json",

data:{ }

asyns:true ,

success:function( result){console.log(result) }

};

//obi 中的属性,覆盖到 defaults 中的属性

//1、如果有一些属性只存在 obj 中, 会给 defaus 中增加属性

//2、如果有一些属性在 obj 和 defaults 中都存在,会将 defaults 中的默认值覆盖

//3、如果有一些属性只在 defaults 中存的中不存在、在 obj 中不存在,这时候defaults 中将保留预定义的

for(var key in obj) {

defaults[key]= obj[key];

}

var xhr = null;

if(window.XMLHttpRequest) {

xhr=new XMLHttpRequest();

} else {

xhr = new ActiveXOBject(“Microsoft.XMLHTTP”)

}

//得到params

// data:{

// uname: “zhangsan"

//  age:"18"

// } //  uname-zhangsan&age=18

var params =“ ”

for(var attr in defaults.data) {

params +=attr +“=”+defaults;data[attr] +“&”;

}

if(params) {

params= params.substring(image.png,params.length-1);

}

if(defaults.type get==”get“) {

defaults.url +=“?” params;

}

xhr.open(defaults.type,defaults.url,defaults.async);

if(defaults.type==“ get") {

xhr.send(null);

} else if(defaults,type==“ post”) {

xhr.setReguestHeader(“ContentType",“application/x-www-form-urlencoded”);

xhr.send(params);

}

if(defaults.async) {

xhr.onreadystatechange = function(){

if(xhr.readyState==4){

if(xhr.status == 200) {

var result - null:

if(defaults.dataType==“json”){

result=xhr.responseText;

result=JSON.parse(result);

} else if(defaults.datalype == xml"){

result=xhr.responseXML;

}else {

result=xhr.responseText;

}

defaults.success(result)

}

}

}

}else{

if(xhr.readyState==4){

if(xhr.status == 200) {

var result - null:

if(defaults.dataType==“json”){

result=xhr.responseText;

result=JSON.parse(result);

} else if(defaults.datalype == xml"){

result=xhr.responseXML;

}else {

result=xhr.responseText;

}

defaults.success(result)

}

}

目录
打赏
0
0
0
0
216
分享
相关文章
SEO之关键词的选择
SEO之关键词的选择
315 0
Android ViewDragHelper:控制子View能否拖曳及水平方向的拖曳边界(2)
 Android ViewDragHelper:控制子View能否拖曳及水平方向的拖曳边界(2) 附录文章1简单介绍了Android ViewDragHelper的使用,注意到附录文章1的代码运行结果,附录文章1的示例有三个子view,每个子view均可拖曳,但是,它们可以拖曳越出边界超出屏幕的显示范围,被拖曳到视野看不到的地方去了。
914 0
kde
|
12天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
8473 50
|
10天前
typora免费版,激活方法,Typora使用教程
Typora是一款简洁高效的Markdown编辑器,支持即时渲染。本教程涵盖安装方法、文件操作、视图控制、格式排版、字体样式及Markdown语法,助你快速上手使用Typora进行高效写作。
2254 4
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
2122 31
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
815 10
【保姆级图文详解】大模型、Spring AI编程调用大模型
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问