建站极客
网络编程 AJAX相关 正文
变量冲突处理
所属分类:
网络编程 / AJAX相关
阅读数:
1155
收藏 0
赞 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; } }
理解jquery ajax中的datatype属性选项值 jquery中ajax的dataType属性用于指定服务器返回的数据类型,如果不指定,jQuery 将自动根据HTTP包MIME信息来智能判断,如果datatype选项不填写的话,会将返回的数据当成字符串处理。
评论 0
收藏 0
赞 0
分享
通过Ajax两种方式讲解Struts2接收数组表单的方法 使用struts2表单传值,可以传一个或者是作为一个对象的各个属性传,都非常灵活便捷。但是如果我们需要传一个数组并希望struts正确接收,该怎么处理呢?接下来,通过本文给大家介绍通过Ajax两种方式讲解Struts2接收数组表单的方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
基于Jquery.history解决ajax的前进后退问题 本文主要给大家介绍基于Jquery.history解决ajax的前进后退问题,涉及到jquery前进后退相关方面的知识,本文内容经典,非常具有参考价值,特此把jquery前进后退相关知识分享在脚本之家网站供大家参考
评论 0
收藏 0
赞 0
分享
谈谈你对aja的理解(一、二) Ajax是Asynchronous Javascript And XML的缩写,其作用通过Ajax可以使用Javascript语句来调用XMLHttpRequest对象,直接与服务器进行通讯,可以在不重载页面的情况下与服务器交换数据。
评论 0
收藏 0
赞 0
分享
关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结 最近比较空闲,于是抽个时间整理些关于ajax方法的东东。在项目中经常发现ajax板块好多问题都是属性,方法,事件大小写不区分问题,最终导致了程序运行出现麻烦,下面给大家介绍关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
评论 0
收藏 0
赞 0
分享
Ajax请求session失效该如何解决 HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。
评论 0
收藏 0
赞 0
分享
编写轻量ajax组件02--浅析AjaxPro ajaxpro虽然是一个比较老的组件,不过实现思想和源码还是很有借鉴价值的。接下来通过本篇文章给大家介绍编写轻量ajax组件02--浅析AjaxPro,感兴趣的朋友可以参考下
评论 0
收藏 0
赞 0
分享
查看更多