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

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

开发者学堂课程【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)

}

}

相关文章
|
6月前
|
SQL 缓存 监控
后端接口性能优化分析-问题发现&问题定义(上)
后端接口性能优化分析-问题发现&问题定义
525 0
|
6月前
|
监控 NoSQL Java
后端接口性能优化分析-问题发现&问题定义(下)
后端接口性能优化分析-问题发现&问题定义
149 0
|
6月前
|
NoSQL 算法 Java
后端接口性能优化分析-程序结构优化(中)
后端接口性能优化分析-程序结构优化
72 0
|
6月前
|
消息中间件 Java 关系型数据库
后端接口性能优化分析
后端接口性能优化分析
117 0
|
存储 缓存 监控
《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握了一些实用的技巧。
114 0
|
6月前
|
NoSQL Java Redis
后端接口性能优化分析-程序结构优化(上)
后端接口性能优化分析-程序结构优化
201 0
|
3月前
|
前端开发 JavaScript
构建前端防腐策略问题之后端配合前端进行GraphQL改造变得不太现实的问题如何解决
构建前端防腐策略问题之后端配合前端进行GraphQL改造变得不太现实的问题如何解决
|
3月前
|
机器学习/深度学习 分布式计算 前端开发
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
|
6月前
|
算法 测试技术 数据处理
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
178 5
|
6月前
|
消息中间件 缓存 监控
项目接口性能优化方案
项目接口性能优化方案
82 1