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

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

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

}

}

相关文章
|
SEO
SEO之关键词的选择
SEO之关键词的选择
360 0
|
1天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
242 116
|
16天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
10天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
637 221
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
866 61
|
8天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1380 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
265 139