关于Ajax的一揽子工程

--异步数据交互

/*内部培训用的,写得非常基础*/
  
        Ajax不仅仅就是XMLHttpRequest这么简单。

  在以前,我们写客户端的代码一般是实现几个效果,做一下数据校验这些简单的事情。那时,客户端的代码一般不会太多,也不会很复杂,而且大部分情况下这些代码并不是业务过程的核心代码,一定程序上,这些代码是可有可无的,如果它们不能很好的工作,也并不会影响大局。

  但现在情况不同了,我们用Ajax做的工程,一方面客户端代码量急骤增加。代码量急聚增中后,代码的管理难度急骤增加,这时我们就需要用到一些工程化管理方法来组织我们的代码,所以我们可以看到很多成熟的Ajax客户端框架都采用了模拟面向对象的方式来实现。另一方面,客户端的不少代码直接和我们的业务逻辑相关,可以说客户端的脚本直接决定我们的程序能不能完成任务,这样的话,我们在写客户端脚本时,不能不更加小心,由此,我们可以看到,Ajax已经涌现出了不少的设计模式,人们也更加重视对Web standard的遵守,也更加重视的cross-browser(跨浏览器)能力。

  因此,可以说关于Ajax,有一揽子注意事项,有一揽子工程。

       今天我们先来解决最基础的问题:异步数据交互方式。

       总的来说,常用的异步数据交互方式有二种:frameset/iframe和XMLHttpRequest。

       frameset的一般做法是在框架中做一个高度或宽度为0的隐藏帧。代码如下:

关于Ajax的一揽子工程(1) <frameset rows="100%,0" frameborder="0">
关于Ajax的一揽子工程(1)    
<frame name="displayFrame" src="display.htm" noresize="noresize" />
关于Ajax的一揽子工程(1)    
<frame name="hiddenFrame" src="about:blank" noresize="noresize" />
关于Ajax的一揽子工程(1)
</frameset>

        然后再用脚本操作hiddenFrame负责刷数数据,并把返回给自己的内容更新到显示帧。比如在显示页面的一个按钮注册如下click事件处理程序:

        function requestCustomerInfo() {
            
var sId = document.getElementById("txtFormFiled").value;
            top.frames[
"hiddenFrame"].location = "GetNewData.aspx?id=" + sId;
        }
         然后,隐藏的帧去获取数据,获取数据之后,同样通过脚本来更新显示帧中的内容:
    <script type="text/javascript">
        window.onload 
= function () {
            
var divInfoToReturn = document.getElementById("divInfoToReturn");
            top.frames[
"displayFrame"].document.getElementById("divInfo").innerHTML = divInfoToReturn.innerHTML;        
        };
    
    
</script>

</head>
<body>
    
<div id="divInfoToReturn"><%=Your return content关于Ajax的一揽子工程(1)%><div>
</body>
       采用这种方式实现post比较的麻烦,需要用DOM操作把显示帧中的form以及form中的值都复制一份到隐藏帧,再通过隐藏帧来代替显示帧提交表单,一般是通过显示帧中的表单提交按钮的onclick事件截获表单提交事件来实现。

       HTML4.0以后我们可以采用iframe,iframe不需要帧集,可以放在文档的任何地方,可以通过脚本创建,所以它更灵活。
];
        }
//众多的ActiveX的XMLHttp版本
var XML_VERS = ["MSXML2.XmlHttp.5.0""MSXML2.XmlHttp.4.0"
                
"MSXML2.XmlHttp.3.0""MSXML2.XmlHttp",
                
"Microsoft.XmlHttp"];

function XmlHttp(){}

//创建Requestor
XmlHttp.createRequest = function () {

    
if (XMLHttpRequest) {//Non-IE
        return new XMLHttpRequest();
    }
    
else if (ActiveXObject) {//IE
        forvar i = 0 ; i < XML_VERS.length ; i ++){
            
try{
                
var oXmlHttp = new ActiveXObject(XML_VERS[i]);
                
return oXmlHttp;
            } 
catch (e){}
                
        }
    }
};

相关文章:

  • 2022-12-23
  • 2021-12-25
  • 2022-02-07
  • 2022-12-23
  • 2021-08-12
  • 2021-12-04
  • 2021-08-27
猜你喜欢
  • 2021-08-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2021-08-06
  • 2021-12-06
相关资源
相似解决方案