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

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

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

}

}

相关文章
|
16小时前
|
监控 NoSQL Java
后端接口性能优化分析-问题发现&问题定义(下)
后端接口性能优化分析-问题发现&问题定义
66 0
|
16小时前
|
SQL 缓存 监控
后端接口性能优化分析-问题发现&问题定义(上)
后端接口性能优化分析-问题发现&问题定义
454 0
|
16小时前
|
NoSQL 算法 Java
后端接口性能优化分析-程序结构优化(中)
后端接口性能优化分析-程序结构优化
42 0
|
16小时前
|
消息中间件 Java 关系型数据库
后端接口性能优化分析
后端接口性能优化分析
49 0
|
7月前
|
存储 缓存 监控
《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握了一些实用的技巧。
55 0
|
16小时前
|
NoSQL Java Redis
后端接口性能优化分析-程序结构优化(上)
后端接口性能优化分析-程序结构优化
171 0
|
16小时前
|
缓存 NoSQL Redis
接口性能优化的小技巧
接口性能优化的小技巧
|
16小时前
|
算法 测试技术 数据处理
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
78 5
|
16小时前
|
消息中间件 缓存 监控
项目接口性能优化方案
项目接口性能优化方案
38 1
|
16小时前
|
存储 监控 安全
插件机制详解:原理、设计与最佳实践
插件机制详解:原理、设计与最佳实践
123 0