美文网首页
XMLHttpRequest

XMLHttpRequest

作者: strong9527 | 来源:发表于2016-09-21 23:29 被阅读38次

    对于此博文的整理加工。

    独享的属性和方法

    属性 说明
    readyState 表示XMLHttpRequest对象的状态:0:未初始化。对象已创建,未调用open1:open方法成功调用,但Sendf方法未调用;2:send方法已经调用,尚未开始接受数据;3:正在接受数据。Http响应头信息已经接受,但尚未接收完成;4:完成,即响应数据接受完成。
    Onreadystatechange 请求状态改变的事件触发器(readyState变化时会调用这个属性上注册的javascript函数)
    responseText 服务器响应的文本内容
    responseXML 服务器响应的XML内容对应的DOM对象
    Status 服务器返回的http状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。
    statusText 服务器返回状态的文本信息。

    方法:

    ;

    1.创建XMLHttpRuquest对象

    //这么长代码其实就是兼容性,

    
    var xmlhttprequest;  
       if(window.XMLHttpRequest){  
           xmlhttprequest=new XMLHttpRequest();  
           if(xmlhttprequest.overrideMimeType){  
               xmlhttprequest.overrideMimeType("text/xml");  
           }  
       }else if(window.ActiveXObject){  
           var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
           for(var i=0;i<activeName.length;i++){  
               try{  
                   xmlhttprequest=new ActiveXObject(activeName[i]);  
                   break;  
               }catch(e){  
                            
               }  
           }  
       }  
         
       if(xmlhttprequest==undefined || xmlhttprequest==null){  
           alert("XMLHttpRequest对象创建失败!!");  
       }else{  
           this.xmlhttp=xmlhttprequest;  
       }  
    
    

    2.回调方法

    
    xmlhttp.onreadystatechange=callback;  
    
    

    3.设置和服务器交互的相应参数

    
    xmlhttp.open("GET","ajax?name=" +userName,true); 
    
    

    4.设置向服务器端发送的数据,启动和服务器端的交互

    
    POST 请求
    POST 请求可以包含非常多的数据, 我们在使用表单提交的时候, 很多就是使用的 POST
    传输方式。
    xhr.open('post', 'demo.php', true);
    而发送 POST 请求的数据,不会跟在 URL 的尾巴上,而是通过 send()方法向服务器提
    交数据。
    xhr.send('name=Lee&age=100');
    一般来说,向服务器发送 POST 请求由于解析机制的原因,需要进行特别的处理。因为
    POST 请求和 Web 表单提交是不同的,需要使用 XHR 来模仿表单提交。
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
    

    5.校验交互完成情况,以及数据返回

    
    function callback(){  
         if(xmlhttp.readState==4){  
             //表示服务器的相应代码是200;正确返回了数据   
            if(xmlhttp.status==200){   
                //纯文本数据的接受方法   
                var message=xmlhttp.responseText;   
                //使用的前提是,服务器端需要设置content-type为text/xml   
                //var domXml=xmlhttp.responseXML;   
                //其它代码  
             }   
        }  
     }  
    
    

    总结代码

    
    
    //类的构建定义,主要职责就是新建XMLHttpRequest对象  
    var MyXMLHttpRequest=function(){  
        var xmlhttprequest;  
        if(window.XMLHttpRequest){  
            xmlhttprequest=new XMLHttpRequest();  
            if(xmlhttprequest.overrideMimeType){  
                xmlhttprequest.overrideMimeType("text/xml");  
            }  
        }else if(window.ActiveXObject){  
            var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
            for(var i=0;i<activeName.length;i++){  
                try{  
                    xmlhttprequest=new ActiveXObject(activeName[i]);  
                    break;  
                }catch(e){  
                             
                }  
            }  
        }  
          
        if(xmlhttprequest == undefined || xmlhttprequest == null){  
            alert("XMLHttpRequest对象创建失败!!");  
        }else{  
            this.xmlhttp=xmlhttprequest;  
        }  
          
        //用户发送请求的方法  
        MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){  
            if(this.xmlhttp!=undefined && this.xmlhttp!=null){  
                method=method.toUpperCase();  
                if(method!="GET" && method!="POST"){  
                    alert("HTTP的请求方法必须为GET或POST!!!");  
                    return;  
                }  
                if(url==null || url==undefined){  
                    alert("HTTP的请求地址必须设置!");  
                    return ;  
                }  
                var tempxmlhttp=this.xmlhttp;  
                this.xmlhttp.onreadystatechange=function(){  
                    if(tempxmlhttp.readyState==4){  
                        if(temxmlhttp.status==200){  
                            var responseText=temxmlhttp.responseText;  
                            var responseXML=temxmlhttp.reponseXML;  
                            if(callback==undefined || callback==null){  
                                alert("没有设置处理数据正确返回的方法");  
                                alert("返回的数据:" + responseText);  
                            }else{  
                                callback(responseText,responseXML);  
                            }  
                        }else{  
                            if(failback==undefined ||failback==null){  
                                alert("没有设置处理数据返回失败的处理方法!");  
                                alert("HTTP的响应码:" + tempxmlhttp.status + ",响应码的文本信息:" + tempxmlhttp.statusText);  
                            }else{  
                                failback(tempxmlhttp.status,tempxmlhttp.statusText);  
                            }  
                        }  
                    }  
                }  
                  
                //解决缓存的转换  
                if(url.indexOf("?")>=0){  
                    url=url + "&t=" + (new Date()).valueOf();  
                }else{  
                    url=url+"?+="+(new Date()).valueOf();  
                }  
                  
                //解决跨域的问题  
                if(url.indexOf("http://")>=0){  
                    url.replace("?","&");  
                    url="Proxy?url=" +url;  
                }  
                this.xmlhttp.open(method,url,true);  
                  
                //如果是POST方式,需要设置请求头  
                if(method=="POST"){  
                    this.xmlhttp.setRequestHeader("Content-type","application/x-www-four-urlencoded");  
                }  
                this.xmlhttp.send(data);  
        }else{  
            alert("XMLHttpRequest对象创建失败,无法发送数据!");  
        }  
        MyXMLHttpRequest.prototype.abort=function(){  
            this.xmlhttp.abort();  
        }  
      }  
    }     
    
    

    相关文章

      网友评论

          本文标题:XMLHttpRequest

          本文链接:https://www.haomeiwen.com/subject/safwettx.html