免费刷金币,请点击这里
TE社区 > 前端技术
客服QQ:1206116161

变量冲突处理

低首闻忘川水 于 2018-05-23 16:00:03 创建话题
(75)
(0)
举报
最近做了一阶段的AJAX开发,有一些心得体会。日后会慢慢写出来,也请AJAXer多多指教~   刚开始写AJAX代码的时候,直接参照的是AJAX基础教程一书中的代码(该书真的很不错,是AJAX入门的经典教材,是图灵出版社的。计算机方面的书籍,我最信任的就是O'R和图灵的)。   
   该书的创建XMLHttpRequest对象的代码如下: 
var xmlHttp; 
function createXMLHttpRequest() {    if (window.ActiveXObject) {        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");    }     else if (window.XMLHttpRequest) {        xmlHttp = new XMLHttpRequest();    }} 
在一般情况下,该代码的使用不会带来任何问题。
如:
function test1(){ createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange1; url = "test.php?ts=" + new Date().getTime(); xmlHttp.open("GET", url, true); xmlHttp.send(null);}
function test2(){ createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange2; url = "test.php?ts=" + new Date().getTime(); xmlHttp.open("GET", url, true); xmlHttp.send(null);}

function handleStateChange1() {    ......
}


function handleStateChange2() {    ......
}
..........

在页面的不同地方调用test1,test2函数都能正常工作。即不同时刻调用的话,就不会产生问题。

但是假如你需要在同一时刻同时调用这两个函数,则会发现只有其中一个可以正常运行。
比如,我在加载页面的时候运行如下函数:

function init(){ test1(); test2();}

此时,则test1,test2只有一个函数会正常执行。

分析下原因,是由于javascript的语言特性导致。一般情况下,Javascript的变量,函数等等,都是公用的,其他对象都能访问(可读可写)。这就是问题的所在。在同一时刻,调用test1和test2就会出现“变量xmlHttp”的冲突。

解决方法:

1  最简单的方法,不要在同一时刻调用,如init函数可以改为:

function init(){ test1(); setTimeout("test2()",500);}

   但该方法属于投机,并未真正解决问题。

2  修改“XMLHttpRequest创建函数”,改为一实例化函数。

function createXMLHttpRequest() {    if (window.ActiveXObject) {        var xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");    }     else if (window.XMLHttpRequest) {        var xmlHttpObj = new XMLHttpRequest();    } return xmlHttpObj;}

实例化时相应的改为:

function test1(){ xmlHttp_1 = createXMLHttpRequest(); 
 xmlHttp_1.onreadystatechange = handleStateChange1; url_1 = "test.php?ts=" + new Date().getTime(); xmlHttp_1.open("GET", url, true); xmlHttp_1.send(null);}



function test2(){ xmlHttp_2 = createXMLHttpRequest(); 
 xmlHttp_2.onreadystatechange = handleStateChange1; url_2 = "test.php?ts=" + new Date().getTime(); xmlHttp_2.open("GET", url, true); xmlHttp_2.send(null);}

这样子处理的话,即使在同一时刻调用test1,test2函数,也不会产生问题了,实现了真正的“同步”。 

#######################################################
通过该方法,可以引申出javascript中对象的“私有属性”的创建方法:
1 私有属性可以在构造函数中使用 var 关键字定义。
2 私有属性只能由特权函数公用访问。(特权函数就是在构造函数中使用this关键字定义的函数)。外部客户可以访问特权函数,而且特权函数可以访问对象的私有属性。

比如下面这个Vehicle类,则wheelCount和curbWeightInPounds就是私有属性,只能通过特权函数访问/设置了:
function Vehicle() {    var wheelCount = 4;    var curbWeightInPounds = 4000;
    this.getWheelCount = function() {        return wheelCount;    }
    this.setWheelCount = function(count) {        wheelCount = count;    }
    this.getCurbWeightInPounds = function() {        return curbWeightInPounds;    }
    this.setCurbWeightInPounds = function(weight) {        curbWeightInPounds = weight;    }
 }
扫码关注TE官方微博 扫码关注TE官方微博
JS字符串截取函数实例 PHPCMS 栏目页及列表页分页修改 yii2中关于加密解密的那些事儿 python自动化报告的输出用例详解 node.js中的fs.fstat方法使用说明 Oracle字符函数应用检测汉字的方法 js实现表单多按钮提交action的处理方法 sqlserver中的事务和锁详细解析 iOS中 UIActionSheet字体的修改 Js apply方法详解 jQuery对象初始化的传参方式 Jenkins安装以及邮件配置详解 最短的IE判断var ie=!-[1,]分析 js汉字转拼音实现代码 Extjs4 关于Store的一些操作(加载_回调_添加) JavaScript中的分号插入机制详细介绍 10个实用的PHP正则表达式汇总 深入谈谈lua中神奇的table JS提交并解析后台返回的XML的代码 原生JS实现N级菜单的代码 html网页插入图片、加入地图索引示例讲解 详解VueRouter进阶之导航钩子和路由元信息 ASP.NET操作MySql数据库的实例代码讲解 NodeJS 中Stream 的基本使用 当jQuery1.7遇上focus方法的问题 node.js中的fs.readdirSync方法使用说明 ASP FSO显示特殊文件夹的实现代码(畸形目录名、UNC路径) 详解CentOS中更新系统而不更新Linux内核的方法 分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容 干货来袭! C# 7.0 新特性(VS2017可用) .net下log4net使用方法详解 ASP中实现定时发送邮件的代码分享 PHPCMS 2008 SP3 常用函数 JS判断字符串长度的5个方法(区分中文和英文) javascript DOM编程实例(智播客学习) Python只用40行代码编写的计算器实例 Vue+Flask实现简单的登录验证跳转的示例代码 JavaScript比较当前时间是否在指定时间段内的方法 解决列高度自适应(相同)的五种方法 Css绘制箭头实现代码 JS获取短信验证码倒计时的实现代码 JSP避免Form重复提交的三种方案 利用CSS、JavaScript及Ajax实现图片预加载的方法 jQuery源码分析-05异步队列 Deferred 使用介绍 Jquery对新插入的节点 绑定Click事件失效的解决方法 JS中图片缓冲loading技术的实例代码 Python入门教程 超详细1小时学会Python 未将对象引用设置到对象的实例 (System.NullReferenceException) HTML实现简单计算器附详细思路 phpcms实现验证码替换及phpcms实现全站搜索功能教程详解 IE6兼容png24透明滤镜写法 图片路径是以页面为基点 浅谈JSON.parse()和JSON.stringify() jQuery html() in Firefox (uses .innerHTML) ignores DOM changes mysql 8.0.12 解压版安装教程 个人亲测! PHP中source #N问题的解决方法 JavaScript实现仿淘宝商品购买数量的增减效果 PHP输出图像imagegif、imagejpeg与imagepng函数用法分析 正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较 IOS图片设置毛玻璃效果 详解清除MongoDB所占用的多余的磁盘空间的方法 ASP URL反编码函数代码 Java 9中如何对IntegerCache进行修改详解 DoS拒绝服务攻击工具基本技术及其发展方向 Django中日期处理注意事项与自定义时间格式转换详解 python字典基本操作实例分析 javascript判断网页是关闭还是刷新 Java实现五子棋网络版 一些简单的ASP练习 vue2.0移除或更改的一些东西(移除index key) AngularJS中的拦截器实例详解 404 错误页面正确设置方法 Ubuntu15.10怎么使用Chromium浏览器登录微信? PHP开发框架Laravel数据库操作方法总结 bootstrap配合Masonry插件实现瀑布式布局 详解Python当中的字符串和编码 定义标题的最好方法 FSO的强大功能 JavaScript基础重点(必看) 判断滚动条滑到底部触发事件(实例讲解) ResourceBundle类在jsp中的国际化实现方法 apycom出品的jQuery精美菜单破解方法 jquery 手势密码插件 SpringBoot+Vue.js实现前后端分离的文件上传功能 使用InstantClick.js让页面提前加载200ms Cpage.js给组件绑定事件的实现代码 PHP构造二叉树算法示例 Python获取昨天、今天、明天开始、结束时间戳的方法 mongoDB在windows下安装与配置方案 oracle跨库查询dblink的用法实例详解 详解MongoDB中用sharding将副本集分配至服务器集群的方法 JSP+Servlet制作Java Web登录功能的全流程解析 jquery 文本上下无缝滚动,鼠标放上去就停止 小例子 运行page页面时的事件执行顺序及页面的回发与否深度了解 Discuz! X2.0 邮件发送返回错误信息的解决方法 dedecms列表页文章摘要字数的设置方法 javascript之with的使用(阿里云、淘宝使用代码分析) php Redis函数用法实例总结【附php连接redis单例类】 python定时执行指定函数的方法 Python的条件语句与运算符优先级详解 asp 获取url函数小结 jQuery基于扩展简单实现倒计时功能的方法 在js中实现邮箱格式的验证方法(推荐) PHP处理JSON字符串key缺少双引号的解决方法 Android内部存储改变读取权限的方法 asp.net MVC利用ActionFilterAttribute过滤关键字的方法 详解在Linux中怎么使用cron计划任务 MySQL多线程复制遇到Error_code 1872的解决方案 CentOS 上搭建 PHP7 开发测试环境 PHP 使用二进制保存用户状态的实例 Vue实现数字输入框中分割手机号码的示例 NetworkX之Prim算法(实例讲解) javascript实现dom元素可拖动 启动targetcli时遇到错误解决办法 JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结 有关于PHP中常见数据类型的汇总分享 基于iOS pod最新的安装和使用方法(分享) 使用JSON.parse将json字符串转换成json对象的时候会出错 最好用的省市二级联动 原生js实现你值得拥有 jQuery的slideToggle方法实例 Request获取Session的方法总结 Linux系统下获取主板信息的方法 mysql常用命令汇总介绍 vue自定义指令实现v-tap插件 PostgreSQL中的XML操作函数代码 Ruby中执行Linux shell命令的六种方法详解 easyui Draggable组件实现拖动效果 jquery全选checkBox功能实现代码(取消全选功能) 域名是否被搜索引擎惩罚过的查看方法 浅谈Nodejs中的作用域问题 ajax的两种提交方式(get_post)和两种版本 Vue.js实现多条件筛选、搜索、排序及分页的表格功能 对numpy中shape的深入理解 关于IIS连接数和在线人数的详细说明 在Linux上使用文件系统tmpfs的技巧 .Net Core 之 Ubuntu 14.04 部署过程(图文详解) 突破canvas语法限制 让他支持链式语法 Angular中支持SCSS的方法 js函数在frame中的相互调用详解 js 绑定带参数的事件以及手动触发事件 jQuery实现页面评论栏中访客信息自动填写功能的方法 DOM操作和jQuery实现选项移动操作的简单实例 php取出数组单个值的方法 oracle求字符串长度函数length()和hengthb()简介 asp.net页面状态管理cookie和服务器状态管理Session 错误代码:1100 Table 't_depart_info' was not locked with LOCK TABLES的解决方法 js二级地域选择的实现方法 Linux下动态链接库加载路径及搜索路径问题 php实现异步数据调用的方法 Python md5与sha1加密算法用法分析 解决IE6、IE7、Firefox兼容比较简单的CSS Hack jquery实现的蓝色二级导航条效果代码 js点击更换背景颜色或图片的实例代码 iOS中常用的宏定义总结 js checkbox(复选框) 使用集锦 JS复制内容到剪切板的实例代码(兼容IE与火狐) Python网络编程 Python套接字编程 Android中一种巧妙的drawable.xml替代方案分享 简单解析PHP程序的运行流程 vue中手机号,邮箱正则验证以及60s发送验证码的实例 react-native组件中NavigatorIOS和ListView结合使用的方法 图解js图片轮播效果 linux 账户管理命令 useradd、groupadd使用方法 vue.js整合mint-ui里的轮播图实例代码 基于canvas粒子系统的构建详解 jQuery实现鼠标滚动图片延迟加载效果附源码下载 asp.net uploadify实现多附件上传功能 PHP函数学习之PHP函数点评 禁用JavaScript控制台调试的方法 jQuery实现鼠标滑过预览图片大图效果的方法 Jquery Easyui搜索框组件SearchBox使用详解(19) form表单只提交数据而不进行页面跳转的解决方案 详解Angular.js数据绑定时自动转义html标签及内容 Jquery 实现Tab效果 思路是js思路 AngularJS实现的JSONP跨域访问数据传输功能详解 Lua中table的一些辅助函数介绍 js排序与重组的实例讲解 jquery checkbox的相关操作总结 编程语言中十六进制的正则匹配 微信js-sdk地理位置接口用法示例 python中set()函数简介及实例解析 修改Laravel5.3中的路由文件与路径 web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验 php封装的验证码工具类完整实例 js获取IP和PcName(IE)在vs中可用 Ubuntu 搭建LNMP环境图文教程 配置nginx支持PHP CentOS6.5下drbd的安装与配置详解 一些常用的DIV+CSS的网页布局所用的代码段 JS按回车键实现登录的方法 一步步教大家编写酷炫的导航栏js+css实现 Python实现淘宝秒杀聚划算抢购自动提醒源码 Android xml解析实例详解 jQuery EasyUI之DataGrid使用实例详解 前端弹出对话框 js实现ajax交互 基于HTML5的WebGL经典3D虚拟机房漫游动画 asp.net下日期和时间处理的类库 将光标定位于输入框最右侧实现代码 用virtualenv建立多个Python独立虚拟开发环境 ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 开启BootStrap学习之旅 发现四种在网页中使用CSS样式表的方法
【PHP源码】inso相册 v1.0.1 简体版_insov1.0.1gb.zip SSH+bootstrap框架公司内部项目日志管理系统 SSH 电子商务平台源码 安卓卡片浏览超炫 类似于百度图谱jQuery特效.zip CSS3实现可爱害羞的小狗特效.zip 棕色拿着相机拍照网站模板.zip 微信小程序Demo:仿麦当劳微信小程序 jQuery仿电子印章在线制作代码.zip IT项目服务网页模板.zip ingeno公司Joomla模板.zip 微信小程序源码-企业间的计步 【PHP源码】PHP分类程序源代码版[BBWPS] v2.1_bbwps_sort.zip 正方形索引按钮jquery幻灯片.zip jquery图片居中放大代码.zip HTML5鼠标控制骑自行车速度动画.zip 【PHP源码】UCenter Home v1.2 正式开源版 简体UTF-8_ucenter_home_1.2_sc_utf8.zip HTML5响应式软件科技公司网站源码 织梦安防电子企业网站模板源码.zip jQuery标签插件flyLabel.zip jq全屏背景幻灯片.zip 教育培训机构网站模板.zip 【PHP源码】品告CMS系统(电影版) v0.92_pingaocms.zip html5 echarts仪表盘动画特效.zip jQuery带遮罩高亮图片滑动切换代码.zip 个人设计师作品展示模板.zip 微信小程序源码-云文档 易迅新品首发jQuery焦点图.zip 纯文本Loading加载动画特效.zip js日期时间脚本.zip jquery橙色多级导航.zip jQuery下拉滑动切换导航条.zip 仿excel表格,可实现运算 maven整合ssm框架+EhCache搭建(eclipse可直接运行) 微商洗护品牌化妆品网站模板html源码.zip jQuery圆形横向图片轮播图切换.zip 【PHP源码】Disucz! v5.5.0 UTF-8繁体中文版_discuz!_5.5.0_tc_utf8.zip 论坛管理系统(Struts2) 【PHP源码】wordpress 广告插件 v1.6.7.1 中文版_all-in-one-adsense-and-ypn-pro.zip 微信小程序源码-查火车票 jquery动态云登陆.zip css3带阴影效果的tab选项卡.zip jQuery完整的职业选择插件下载.zip 【ASP.NET源码】网奇IOS智能在线订单系统 v2.5 (ASP.NET 2.0)_wqios2.08.zip jQuery带评论的星星评分代码.zip jQuery活动现场人数翻页统计插件.zip 黑色复古培训网站模板.zip HTML5分段式SVG文字动画特效.zip jquery颜色选择器插件_2.zip jQuery带备忘录功能的日期选择器.zip 【ASP.NET源码】MySite个人展示程序_mysite_blog.zip jQuery鼠标经过变化过渡效果.zip HTML5粒子效果文字动画.zip 【ASP.NET源码】Discuz!NT v2.5 MYSQL For .Net2.0 beta_dnt_25_n2_mysql.zip 【PHP源码】J_Space 人才网 v3.0_j_space30.zip 12款CSS3汉堡包按钮变形动画特效.zip jQuery图片拼图插件Image jigsaw.zip 搜狗壁纸多效果jQuery焦点图.zip 【PHP源码】合婚程序测试版_hf.zip jQuery省市区三级联动插件city-picker.zip 微信小程序源码-茶叶商城(含后端) jQuery移动手机端幻灯片插件Swiper.zip jQuery+CSS3动画相册代码.zip css3仿虾米网banner相片墙.zip 微信小程序 - 红还是绿.zip css3图文列表过渡动画效果.zip 自游行线路拼团网页模板.zip 手饰商城网页模板下载.zip 农家乐有机蔬菜网页模板.zip 【PHP源码】IPB(Invision Power Board) v2.1.5 简体中文语言包UTF-8_ipb_chs_utf-8.zip Spring整合Mybatis+SpringIOC jquery给表格加滚动条.zip jquery仿酷狗官网新闻焦点图插件.zip 支持弹出图片文字和表单模态框代码.zip 复选框点击添加或删除text输入框value值.zip 微信小程序 - 分答小程序.zip 黑色魅力商务html5模板.zip 混合水果CSS网页模板.zip jsp+servlet+Javabean开发java web校园跳蚤市场 HTML5鼠标滚动树生长过程特效.zip MySQL核心DBA视频教程 第03部-MySQL应用管理及进阶实战操作(29节) jQuery右键点击下拉菜单插件.zip 鼠标经过切换jQuery手风琴.zip jQuery发票使用引导.zip dubbo+zk+ssm源码+dubbo-admin 【PHP源码】动网论坛PHP版 v1.0.4 Build 20070521_dvbbs.php_1.0.4_gbk.zip 物流管理系统完整源码,自己做的一个物流系统。 北在青鸟超市收银系统项目 jQuery拖拽插件制作拖拽排序特效.zip zxing Android 二维码扫描 眼镜销售公司html5网站模板.zip CSS3鼠标经过图标变色旋转特效.zip 自适应html5网站模板.zip 浅蓝色会议专题网站模板.zip CSS3制作文字烟雾散开动画特效.zip jQuery手风琴效果插件j-accordion.zip 【PHP源码】In-link v3.1.7_in-link_3_1_7.zip 仿网奇E游帝国模板.zip 侧边固定2列布局HTML5模板.zip 日常生活CSS网页模板.zip jQuery Lightbox图片放大预览代码.zip 时尚公司CSS3模板.zip 纯css3动感导航栏代码.zip jQuery+HTML5实现刮刮乐抽奖特效.zip swipe放大效果的焦点图代码.zip jQuery世界之窗6专题页.zip Discuz7.0果粒橙绿色风格模板.zip 【ASP.NET源码】威购多用户商城英文版 v2008 sp2 Build 0628 英文版_vgoshop_2008sp2_english.zip 【ASP.NET源码】YxShop易想购物商城系统 v4.3.1 bulid 090515 源码版_changehope_b2c_4.zip Jsp企业电子商城 jQuery点击动画增加积分数量.zip 购物邮件HTML5模板.zip 【PHP源码】一流站PHP静化版网址导航 build 0610_16zwz.zip jQuery带播放进度条水平时间轴.zip C# 数据库自定义链接应用池 披萨公司CSS网页模板.zip jQuery彩色图片转黑白图片代码.zip WINDOWS10系统UI界面框架特效.zip 江南SEO淘宝客第四期同步实战网站模板.zip Android定时器 数码产品销售网站模板.zip jQuery键盘控制PPT幻灯片特效.zip 电力公司官网HTML5模板.zip ECShop 绿盒子童装模板.zip jQuery相册专辑插件albumize.zip wp清爽简洁Laconic主题.zip CSS3炫酷自定义Checkbox特效.zip jquery下拉选择城市插件hhDrop.zip 企业人事管理系统-毕业设计 js layDate日历控件代码.zip java 支付宝H5支付Demo 宽屏商务公司HTML5模板.zip css3实现点击svg图标动画特效.zip html5手机端上下左右滑动菜单代码.zip jquery自定义select下拉样式.zip cxSlide电商网站宫格幻灯片.zip 【ASP.NET源码】COCOWO博客 v1.0 Build 0228(开源)_cocowoblog.zip clearbox图片浏览特效.zip 洗车行业网站模板.zip 旅行酒店宾馆整站模板下载.zip jQuery双语切换下拉导航.zip QQ商城jQuery焦点图效果.zip SSM个人博客项目实战(SSM+EasyUI) jquery网站Timeline时间轴.zip jQ缩放图片悬停效果.zip pw8.7简洁风尚模板.zip 公司网站发展时间轴动画特效.zip HTML5响应式模版Mocha.zip CSS3图片导航效果.zip 微信小程序源码-travelListen-master 纯css3实现花格纹理背景.zip Android 解决沉浸式状态栏和华为虚拟按键冲突 iPad软件设计公司网页模板.zip jQuery仿魅族官网注册表单代码.zip jquery图片鼠标拖动效果代码.zip jQuery中国各个省份地图分部代码.zip 7款HTML5 Canvas全屏背景动画特效.zip 气派的建筑公司网站模板.zip 老虎养殖基地HTML5模板.zip 棕色大气宽屏响应式html5模板 公司业务平面引导web模板.zip 宽屏响应式安保公司官网模板.zip 【ASP.NET源码】达达ASP.NET企业信息管理系统_dadaenter.zip 某装饰公司手机网站模板WAP网站模板.zip js+css3实现3D骰子特效.zip 【ASP.NET源码】逐迹工作室.NET(C#)内容管理系统 v1.1_zjcms11.zip 机械装修施工企业网页模板.zip 微信小程序源码-kindle图书商城小程序 美女美容FLASH模板下载.zip 类似iPhone屏幕滑动的jQuery特效.zip 微信小程序 - Render.zip jquery鼠标悬停滑动下拉菜单代码.zip 酷黑大气单页HTML5模板.zip jQuery图片滑动特效集合.zip 微信小程序源码-图书馆写笔记 spring boot + mybatis(通用mapper) druid多数据源切换配置 适合任何类型企业网站模板.zip 精美大餐美食bootstrap模板.zip 纯CSS3实现3D浮动按钮.zip js透明按钮图片滑动切换焦点图.zip wordpress视频站主题下载.zip HTML5手机端手指滑动上拉加载代码.zip 纯CSS3鼠标滑过按钮流光效果代码.zip CSS3图片导航效果.zip 8种fakeloader页面加载动画效果.zip 房屋买卖HTML质感模板.zip 微信小程序源码-城市天气 spring mvc+mybatis+Shiro+dwz实现的通用后台系统 jQuery&CSS3旋转幻灯片代码.zip jQuery宇宙星球信息介绍特效.zip jquery输入框邮箱下拉提示层.zip jQuery鼠标滑过背景视觉差动画特效.zip jQuery带音效旋转式切换幻灯片.zip jquery图片自滚动瀑布流效果.zip jQuery大屏淡入淡出幻灯片.zip html5粒子效果浪漫表白特效.zip 手机应用图标设计模板.zip 棕色公文包设计网站模板.zip JSP房屋租售管理系统java+mysql+ssh 【ASP.NET源码】简易AJAX留言板_simpleguestbook.zip java + sql sever 交通违章管理系统 + 报告
举报X