手写Ajax的意义所在,从青铜到钻石!
话说菩提祖师打了孙猴子三板子 然后悟空学会72般变化以及一身神通 对待这个问题作为面试者要思考更加深层次的意义 才更能获得认可

实际上写的ajax 很能看出一个的水平 贴几段代码就可以看出水平的高低
代码1:青铜水平
var req = new XMLHttpRequest();
req.open("get", "mockData/usersinfo.json", true);
req.send();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
var result= req.responseText;
}
}
特别普通的一段原生ajax 功能也是特别的简单的功能 获取一个模拟的数据 这段代码能反应啥 你可以写出来 也能记住对吧
代码2:白银水平
function ajax(type, url, success) {
var req = new XMLHttpRequest();
req.open(type, url, true);
req.send();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
var result = req.responseText;
success(result);
}
}
}
ajax("get", "http://localhost:8055/listcount.php?search=a", function (result) {
alert(result);
});
上面的代码 跟代码1的功能可以说是一样 但是代码的复用性 就变得完全不一样
是真的

因为可以哪里调用就哪里调用
代码3:黄金水平
function ajax(json) {
var req = new XMLHttpRequest();
var type = json["type"];
var url = json["url"];
if (json["data"]) {
var html = "?";
for (var i in json["data"]) {
html += i + "=" + json["data"][i] + "&";
}
html = html.substring(0, html.length - 1);
url += html;
}
var success = json["success"];
req.open(type, url, true);
req.send();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
var result = req.responseText;
if (json["dataType"] == "json") {
result = JSON.parse(result);
}
success(result);
}
}
}
ajax({
type: "get",
url: "http://localhost:8055/listcount.php",
data: {search: "l"},
dataType: "json",
success: function (result) {
alert(result["count"]);
}
});
以上代码功能也是一样 但是感觉更好了 是不是有一点所谓jq中使用ajax的感觉了 此刻可以啦啦啦的 跳个舞了 千万不要满足

代码4:钻石水平
var $ = {
ajax: function (json) {
var req = new XMLHttpRequest();
var type = json["type"];
var url = json["url"];
if (json["data"]) {
var html = "?";
for (var i in json["data"]) {
html += i + "=" + json["data"][i] + "&";
}
html = html.substring(0, html.length - 1);
url += html;
}
var success = json["success"];
req.open(type, url, true);
req.send();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
var result = req.responseText;
if (json["dataType"] == "json") {
result = JSON.parse(result);
}
success(result);
}
}
}
}
$.ajax({
type: "get",
url: "http://localhost:8055/listcount.php",
data: {search: "l"},
dataType: "json",
success: function (result) {
alert(result["count"]);
}
});
怎么样 虽然写的是原生ajax 但是写出了jq底层代码的味道 跟jq中使用方式一模一样 参数 回调 封装 面面俱到 水平高低 一看就知道了 自己都会写 工作肯定也就会用 这才是钻石水平 还有更高级的星耀 就可以融入Promise 请求头配置等等
不要小看任意一道面试题 可能其中另有深意 体验自己的价值才能拿到更快拿到offer
手写Ajax的意义所在,从青铜到钻石!的更多相关文章
- .net学习之Session、Cookie、手写Ajax代码以及请求流程
1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...
- 前端面试题整理——手写AJAX
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一套手写ajax加一般处理程序的增删查改
倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: ...
- 不借助jquery封装好的ajax,你能用js手写ajax框架吗
不借助jquery封装好的ajax,你能手写ajax框架吗?最基础的ajax框架,一起来围观吧. .创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); ...
- 怎么手写Ajax实现异步刷新
所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面( ...
- 如何手写Ajax实现异步刷新
所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面( ...
- 纯手写AJAX
function ajax(){ //http相应对象 var xmlhttp; //判断浏览器 if(window.XMLHttpRequest){ xmlhttp = new XMLHttpReq ...
- 常见的JS手写函数汇总(代码注释、持续更新)
最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...
- 手写原生ajax
关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XM ...
随机推荐
- python3字符串的方法及注释/ 字符串格式化符号含义及格式化符号含义
capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度wid ...
- 3DMax下载与安装(注册机为网上收集,仅供学习与研究,支持正版)
3DS Max 全称3D Studio Max,是Autodesk公司开发的三维动画制作和渲染软件(Autodesk AutoCAD 2012也是Autodesk公司的软件产品) 3DS Max广泛应 ...
- MySQL 官方测试库
MySQL 官方测试库 github 地址 https://github.com/datacharmer/test_db MySQL 文档地址 https://dev.mysql.com/doc/em ...
- C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思
首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.声明内部链接的变量的方法是在 ...
- MVC Core 使用TagHelper扩展几个插件
未完待续... 案例1:按钮权限校验,无权限不显示,利用TagHelper控制元素是否输出 [HtmlTargetElement("tc-permission", TagStruc ...
- mark-向量式编程
numpy的速度→→→numpy中的向量式编程 from numpy to python https://www.labri.fr/perso/nrougier/from-python-to-nump ...
- win10 将任意文件固定到开始屏幕(最佳办法)
1.情景展示 以.bat文件文件为例,想将其固定到开始屏幕上,但是选中-->右键,却没有固定到开始屏幕选项,如何将其固定到开始屏幕上呢? 2.解决方案 选中你要固定到开始屏幕上的文件--&g ...
- 【Gamma阶段】第六次Scrum Meeting
冰多多团队-Gamma阶段第六次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 语音输入shell应用:基于pytorch ...
- Postman接口测试【3】_自动添加随笔
一.抓取博客园编写博客地址 1.通过Charles抓取,获取到编写博客接口地址和接口的参数 二.Postman请求接口 打开Postman,输入上面抓到的接口地址,接口类型为POST,请求参数为x-w ...
- php 跳出循环 break
break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环.