细节完善_考虑同步异步情况| 学习笔记

简介: 快速学习细节完善_考虑同步异步情况。

开发者学堂课程【Ajax 前端开发入门与实战细节完善_考虑同步异步情况】学习笔记,与课程紧密联系,让用户快速学习知识。

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


细节完善_考虑同步异步情况 


把 myAjax 分装方法测试一遍之后发现没问题,接下来细节完善。

先看 function myAjax(type,url,params,datatype,callback) 先看 params ,对于params 来说如果它是 get 请求的话会与url进行一个拼接,但是如果没有传递params,那么 params 默认值是什么?

默认值为 null,当一个 null 与字符串进行拼接会得到 null--->?null 对与后面?null明显不是想得的结果。

Function myAjax(type,url,params,datatype,callback){

//1 2 3 4

var xhr =null;

if(window.XMLHttpRequest){

xhr = new XMLHttpRequest();

}else{

xhr = new ActionXObject(“Microsoft.XMLHTTP”);

}

//null--->?null

if(type == “get”){

url +=”?” + params;

}

所以对于某些请求没有仓促的情况下怎么样不传递 params ,接着在作为字符拼接时需要做一个条件判断,判断 params 只有在存在的情况下,才需要做一个与 url 的拼接,除此之外如果 params 存在并且不等于空的字符串,这是对 params 进行的条件判断。

//null--->?null

if(type == “get”){

if(params && params != “”){

url += “?” +params;

}

}

xhr.open(type,url,true);

if(type == “get”){

xhr.send(null);

myAjax 方法是很多人进行调用的,所以考虑多些不是坏事。

function myAjax(type,url,params,datatype,callback) 中 datatype,如果 datatype不传递问题也不大,因为不传递 datatype 他就不满足第一个条件,不满足这个条件它一定会到最后一个 else 中,所以对于 datatype 不需要考虑他的异常情况。

if(datatype == “json”){

result = xhr.responsText;

result = JSON.parse(result);

}else if)(datatype == “xml”){

result = xhr.responseXML;

}else{

result = xhr.responseText;

}

if(){

最后一个参数 callback,callback 有时也会忘了传递或者不传递,但如果 callback 不传递,那么 callback 支持一个 null,那支持一个 null 的方法调用,这里面必然会出现错误,所以为了考虑周全,这里必须判断 callback 存在的情况下,需要把callback 进行一个方法的调用,因为 callback 传递进来的一定是个方法。

if(datatype == “json”){

result = xhr.responsText;

result = JSON.parse(result);

}else if)(datatype == “xml”){

result = xhr.responseXML;

}else{

result = xhr.responseText;

}

if(callback){

callback(result);

}

这就是考虑的两个细节,

1. 对于 get 请求来讲,作为字符串拼接时要保证 params 是存在的。

2.callback 方法调用时保证 callback 是存在的。

接着可以考虑同步或者异步的请求,现在统一把他作为一个异步请求,

如:xhr.open(type,url,true);

if(type == “get”){

xhr.send(null);

}else if(type == “post”)

作为一个比较通用的方法需要把情况考虑周全,由调用者来决定这个请求是同步的还是异步的,这里需要创建一个新的参数 async,也就如 function myAjax(type,url,params,datatype,callback),接着把 async 放到 xhr.open(type,url,async);

由调用者来决定他是同步还是异步,一旦把这个参数给传递过来,这里面的值就会有两种情况,一种为 true 一种为 false ,如果为 true 那他是异步走原来的逻辑就可以,但如果他是同步的话,这里需要做一个条件判断,如果 sync 他是一个异步请求,async 加上一个 a 是异步,如果是异步就写和异步相同的逻辑,需要做一个

onreadyystatechange 一个事件的监听,

if(async){

xhr,onreadstatechange = function(){

if(xhr.readyState == 4){

if(xhr.status == 200){

var result = null;

if(datatype == “json”){

result = xhr.responseText;

result = JSON.parse(result);

}

if(callback){

callback(result);

}

}

}

};

}

接着看一下 else 情况,else 是一个同步的请求,那不需要对 xhr 进行一个onreadystatechange 监听,直接获取想要的数据,把代码复制到后面。

最后在 username 传入最后一个参数 false

myAjax(Type,url,params,datatype,function(result){

var username_result =document.querySelector(“#username_result”);

if(result == “ok”){

username_result.innerText = “用户名可以使用”;

}else{

username_result.innerText = ”用户名已被注册”;

}

},false);

};

后面两个请求同一位置也需要传入 true,接下来就简单测试,当输入用户名卡死页面中,原因是在 checkUsername 给他睡了5秒种,当他请求时服务器没返回

那么代码就会一直卡死在:xhr.send(params); 的 send 方法中。

这就是三个细节的优化和操作。

相关文章
|
前端开发 JavaScript
常见的8个前端防御性编程方案
常见的8个前端防御性编程方案
148 0
|
1月前
|
机器学习/深度学习 敏捷开发 算法
技术之道:从细节到全局的智慧
【10月更文挑战第12天】 本文将分享一些关于技术感悟的心得,通过具体实例和总结,探讨如何从细节出发,逐步提升技术能力。无论是新手还是资深开发者,都能从中得到启发和指导。
44 1
|
6月前
|
存储 测试技术 程序员
软件生命周期( 包括各开发模型的优缺点)知识点全面
软件生命周期( 包括各开发模型的优缺点)知识点全面
522 0
|
6月前
|
消息中间件 存储 监控
【ZeroMQ的SUB视角】深入探讨订阅者模式、C++编程实践与底层机制
【ZeroMQ的SUB视角】深入探讨订阅者模式、C++编程实践与底层机制
806 1
|
6月前
|
负载均衡 应用服务中间件 Linux
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
472 0
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【A I 软件开发】一文讲清交互应用的实现原理
【A I 软件开发】一文讲清交互应用的实现原理
233 0
|
存储 NoSQL 算法
线上真实排队系统重构案例分享——实战篇
线上真实排队系统重构案例分享——实战篇
553 0
|
定位技术
事件风暴过程全体验-上篇
事件风暴过程全体验-上篇
事件风暴过程全体验-上篇
|
缓存 数据库
缓存架构设计细节二三事
本文主要讨论这么几个问题:“缓存与数据库”需求缘起、“淘汰缓存”还是“更新缓存”、缓存和数据库的操作时序、缓存和数据库架构简析。
2317 0
|
前端开发
前端工作小结16-设计思路
前端工作小结16-设计思路
78 0
前端工作小结16-设计思路
下一篇
无影云桌面