none
有什么好的、简单的方式封装IE的AJAX? RRS feed

  • 问题

  • 1、只要求在IE上实现,只需要实现get方法

    2、不要JQuery,要原创

    3、使用异步方式,并且要求在同一个页面中可以同时发起多个AJAX请求,互不影响。

     

    我曾经尝试过这样:

    function mysearch()
    {
    var http = null;
    }

    mysearch.prototype=
    {
    search:function()
    {
    var sUrl = ".....";
    if( this.http == null )
    this.http = new ActiveXObject("Microsoft.XMLHTTP");
    else if( this.http.readyState != 4 )
    return false;
    this.http.onreadystatechange = this.handleResult;
    this.http.open( "get", sUrl, true );
    this.http.setRequestHeader( "CACHE-CONTROL", "nocache" );
    this.http.send();
    },

    handleResult:function()
    {
    //do something
    }
    }

    但我发现这样的话,必须将“mysearch”声明为全局变量,而不是在我想要用到的时候才声明。而且这个程序在运行到“onreadystatechange ”的时候会报错。麻烦大家看看,谢谢了。


    da jia hao!
    2010年9月27日 6:56

答案

全部回复

  • 你好:

    为什么不能选择jquery呢?这种封闭起来的很方便而且性能也得到了最优化。

    再说,在一个页面中可以多处使用ajax请求服务器,这和哪个js框架没有关系。

    function getRequest()
    {
    var xmlHttp = false;
    try {
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
     try {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (e2) {
      xmlHttp = false;
     }
    }
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
     xmlHttp = new XMLHttpRequest();
    }
    return xmlHttp;
    }
    
    function DealWithData(RequestType,Async,RequestUrl,SendData,UpdateMethod)
    {
     var xmlHttp=getRequest();
     xmlHttp.open(RequestType, RequestUrl,Async);
     if(RequestType.toUpperCase()=="POST")
     xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     xmlHttp.onreadystatechange = UpdateMethod;
     if(SendData=='')
      SendData=null;
     xmlHttp.send(SendData);
    }
    

    详情请参考http://www.cnblogs.com/BlogNetSpace/archive/2009/03/05/1402845.html
    http://dragonpro.cnblogs.com/archive/2005/04/24/144174.html
    http://www.cnblogs.com/birdshome/archive/2004/12/26/82238.html
    http://kb.cnblogs.com/page/46263/

    希望对你有所帮助。

    2010年9月29日 3:23
    版主
  • 你好:

    为什么不能选择jquery呢?这种封闭起来的很方便而且性能也得到了最优化。

    再说,在一个页面中可以多处使用ajax请求服务器,这和哪个js框架没有关系。

    function getRequest()
    
    {
    
    var xmlHttp = false;
    
    try {
    
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    
    } catch (e) {
    
     try {
    
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    
     } catch (e2) {
    
     xmlHttp = false;
    
     }
    
    }
    
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
    
     xmlHttp = new XMLHttpRequest();
    
    }
    
    return xmlHttp;
    
    }
    
    
    
    function DealWithData(RequestType,Async,RequestUrl,SendData,UpdateMethod)
    
    {
    
     var xmlHttp=getRequest();
    
     xmlHttp.open(RequestType, RequestUrl,Async);
    
     if(RequestType.toUpperCase()=="POST")
    
     xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    
     xmlHttp.onreadystatechange = UpdateMethod;
    
     if(SendData=='')
    
     SendData=null;
    
     xmlHttp.send(SendData);
    
    }
    
    

    详情请参考http://www.cnblogs.com/BlogNetSpace/archive/2009/03/05/1402845.html
    http://dragonpro.cnblogs.com/archive/2005/04/24/144174.html
    http://www.cnblogs.com/birdshome/archive/2004/12/26/82238.html
    http://kb.cnblogs.com/page/46263/

    希望对你有所帮助。


    谢谢,我先研究下您的代码。我们不用JQuery是因为我们希望有完全属于自己的东西,不会受制于人。
    da jia hao!
    2010年10月1日 4:21
  • 我才发现这个代码不是封装啊,只是直接使用Ajax而已。。。

    我现在遇到的问题是,使用异步Ajax的时候,往往都要声明全局变量和一个回调函数,所以才想到是否封装成类之后就可以不用这么麻烦了。


    da jia hao!
    2010年10月1日 4:25