【ajax】xhr
jQuery
xhr: function() {
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}
JavaScript框架设计
// 缓存
function xhr() {
if (!xhr.cache) {
var fns = [
function () { return new XMLHttpRequest(); },
function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
];
for (var i = 0, n = fns.length; i < n; i++) {
try {
fns[i]();
xhr.cache = fns[i];
break;
} catch(e) {}
}
return xhr.cache();
} else {
return xhr.cache();
}
} var xhrObject = xhr(); //调用
alert(xhrObject) //[object XMLHttpRequest]
var xhr = function() {
var fns = [
function () { return new XMLHttpRequest(); },
function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
];
for (var i = 0, n = fns.length; i < n; i++) {
try {
fns[i]();
xhr = fns[i];//注意这里,覆写自身
break;
}catch(e) {}
}
return xhr()
}
console.log(xhr)
console.log(xhr())
console.log(xhr)
console.log(xhr())

window.$ = {}
var s = ["XMLHttpRequest", "ActiveXObject('Msxml2.XMLHTTP.6.0')","ActiveXObject('Msxml2.XMLHTTP.3.0')", "ActiveXObject('Msxml2.XMLHTTP')"];
if (!"1"[0]) {
//判定IE67
s[0] = location.protocol === "file:" ? "!" : s[0]; // 报异常,跳过
}
for (var i = 0, axo; axo = s[i++]; ) {
try {
if (eval("new " + axo)) {
$.xhr = new Function("return new " + axo);
break;
}
} catch (e) {}
}
我们再认真思考一下,既然我们是写框架,那么这些检测其实是放在 IIFE 里面,因此基本不用覆写,检测好哪个可用,就把它加到命名空间上就好了。最后的版本就出来了,使用new Function、eval,反正只用一次,耗不了多少性能
【ajax】xhr的更多相关文章
- 【ajax】发送请求 —— 结合【express】框架 { }
1.先用 express 框架搭建一个简单的服务器 (1)在文件夹上点击右键,点击"在集成终端中打开" (2)使用"npm i express"命令安装[exp ...
- 使用【 ajax 】【 bootstrap 】显示出小窗口 详情内容 一些代码意思可以参考下一个文章
使用[ bootstrap ]显示出小窗口 详情内容 显示页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- 【轮询】【ajax】【js】【spring boot】ajax超时请求:前端轮询处理超时请求解决方案 + spring boot服务设置接口超时时间的设置
场景描述: ajax设置timeout在本机测试有效,但是在生产环境等外网环境无效的问题 1.ajax的timeout属性设置 前端请求超时事件[网络连接不稳定时候,就无效了] var data = ...
- JavaScript(第三十二天)【Ajax】
2005年Jesse James Garrett发表了一篇文章,标题为:"Ajax:A new Approach to Web Applications".他在这篇文章里介绍了一种 ...
- 【Ajax】脑补一下 ajax 的options
问题是因为粉红色部分引起的 ,想搞明白 put delete 的应用场景,发现ajax的一些属性也没有完全用过. 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. t ...
- 【Ajax】实现注册页面判断用户名是否可用的提示—异步加载
效果如图 在注册或登录网站时,当我们输入错误格式的账号或信息时,会看到这种提示. 那怎么实现呢,通过ajax异步加载的方式,可以实现不刷新页面就显示出该提示. 实现 首先创建一个JSP,写一个简单的页 ...
- -_-#【AJAX】XMLHttpRequest
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【ajax】1、ajax原理
Ajax核心XMLHttpRequest对象 XMLHttpRequest对象方法 XMLHttpRequest对象属性 onreadystatechange 状态改变的事件触发器.每次 readyS ...
- 【ajax】ajax异步实现用户注册验证
从前台到后台实现简单用户注册检查用户是否存在 1.编写domain public class User { private String username; private String passwo ...
随机推荐
- BZOJ3307 雨天的尾巴
首先考虑序列怎么做... 只要把操作差分了,记录在每个点上 然后维护一棵权值线段树,表示每个颜色出现的次数,支持单点修改和查询最大值操作 只要把序列扫一遍就好了,时间复杂度$O(n + m*logZ) ...
- WordPress的神器
导读 Markdown 是一种简单的标记语言,旨在帮助你花费更小的代价来格式化纯文本文档.在 WordPress 下你可以使用 HTML 或者可视化编辑器来格式化你的文档,但是使用 markdown ...
- C#压缩图片1
using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;us ...
- poj题目必做
OJ上的一些水题(可用来练手和增加自信) (poj3299T,poj2159T,poj2739T,poj1083T,poj2262T,poj1503T,poj3006T,poj2255T,poj309 ...
- ROS创建工作空间(三)
查看正在使用的ROS工作空间,使用命令 echo $ROS_PACKAGE_PATH 我新建了两个
- Linux查看实时带宽流量情况
Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. 安装iftop的命令如下: CentO ...
- C++封装库
1.新建项目 -> Win32项目 选择DLL , 勾选 空项目 , 点击完成. 2.本例程,使用一个CPP文件 , 及一个头文件. 其中头文件包含函数声明,CPP文件实现函数声明. 3. ...
- POJ 2559 Program C
Submit Status Practice POJ 2559 Description A histogram is a polygon composed of a sequence of recta ...
- 【转发】CentOS 7 巨大变动之 systemd 取代 SysV的Init
1 systemd是什么 首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序. ...
- mybatis分页插件PageHelper的使用(转)
Mybatis 的分页插件PageHelper-4.1.1的使用 Mybatis 的分页插件 PageHelper 项目地址:http://git.oschina.net/free/Mybatis_P ...