美文网首页
xmlhttprequest详解

xmlhttprequest详解

作者: 焦迈奇 | 来源:发表于2019-09-14 18:02 被阅读0次

    XMLHttpRequest(XHR)是一个API对象,用来在浏览器和服务器端传输数据。这个对象是浏览器的js环境提供的。从XHR获取数据的目的是为了持续修改一个加载过的页面,XHR是Ajax设计的底层概念。XHR使用的协议不同于HTTP,不仅可以使用XML格式的数据,也支持JSON,HTML或者纯文本。

    方法:

    readyState状态:
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪


    image.png

    open方法:
    XMLHttpRequest对象的HTTP和HTTPS请求必须通过open方法初始化。这个方法必须在实际发送请求之前调用,以用来验证请求方法,URL以及用户信息。这个方法不能确保URL存在或者用户信息必须正确。初始化请求可以接受5个参数,

    open( Method, URL, Asynchronous, UserName, Password )

    1. 第一个参数是一个字符串值标识HTTP的请求方法。

    -GET (IE7+,Mozilla 1+)
    -POST (IE7+,Mozilla 1+)
    -HEAD (IE7+)
    -PUT
    -DELETE
    -OPTIONS (IE7+)
    W3C草案声明浏览器可以自行决定支持的请求方法。

    1. 第二个参数也是一个字符串值,标示请求的URL。W3C推荐当有跨域请求时,浏览器应该报个错误。

    2. 第三个参数是一个布尔值类型,标示请求是否是异步的,默认为true。异步请求("true")不会等待服务器响应在继续执行其他脚本之前,可以调用XMLHttpRequest对象的onreadystatechange事件监听器来获取请求的不同状态。一个同步的请求("false")会阻塞js执行直到请求完成,这时就没必要调用onreadystatechange事件监听器。

    3. 第四个和第五个参数分别是用户名和密码。这些参数是服务端为了验证请求使用的。

        var xmlhttp;
    
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
            xmlhttp.open("GET", filepath , false);
            xmlhttp.send(null);
        }else if(window.ActiveXObject){
            return;
        }
    

    setRequestHeader方法
    在成功初始化请求之后,XMLHttpRequest对象的setRequestHeader方法可以用来设置请求头。

    setRequestHeader( Name, Value )
    第一个参数是header的字符串名称,第二个参数是字符串值。如果请求需要多个header,这个方法就要被调用多次。这个方法附加的请求头,在下次open方法调用时会被清空。

    send方法
    XMLHttpRequest对象的send方法用来发送请求,这个方法接收一个参数,这个参数就是要发送的内容。

    send(Data)
    如果不需要发送内容,这个参数可以省略。W3C草案声明这个参数可以是任意类型的值只要能被js转成字符串,除了DOM对象。如果用户代理无法序列化这个参数,这个参数会被忽略。Firefox3.0.x以及之前版本在send方法没传参数时会抛出异常。

    如果用户代理被配置成使用代理服务器,XMLHttpRequest对象应该适当修改请求连接代理而不是源服务器,发送Proxy-Authorization头配置。

    onreadystatechange事件监听器
    如果XMLHttpRequest对象的send方法第三个参数是true,也就是发送了异步请求,onreadystatechange事件监听器将自动在XMLHttpRequest对象的readyState属性改变时被触发。

    状态改变过程如下:

    当open方法被成功调用,readyState属性被置为1(OPEND)
    当send方法被调用,成功接收到HTTP响应头,readyState属性被置为2(HEADERS_RECEIVED)
    一旦HTTP响应内容开始加载,readyState属性被置为3(LOADING)
    一旦HTTP响应内容结束加载,readyState属性被置为4(DONE)
    当监听器被定义之后,每次状态改变时都会触发。为了检测状态1和状态2,监听器必须在open方法调用前调用。open方法必须在send方法调用前调用。

        var request = new XMLHttpRequest();
        request.onreadystatechange = function () {
            var DONE = this.DONE || 4;
            if (this.readyState === DONE){
                alert(this.readyState);
            }
        };
        request.open('GET', 'somepage.xml', true);
        request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
        request.send(null);
    

    abort方法
    如果XMLHttpRequest对象的readyState属性还没有变成4,这个方法可以终止请求。这个方法可以确保异步请求中的回调不被执行。

    abort()
    一些AJAX库使用abort方法来取消潜在重复请求以及无序请求。

    HTTP响应
    当成功调用XMLHttpRequest对象的send方法之后,如果服务端响应式格式正确的XML,并且已经把Content-Type头设置成用户代理支持的XML类型,XMLHttpRequest对象的responseXML属性将会包含一个DOM文档对象。另外一个属性responseText将会包含服务端返回的文本类型,而不管它是否被理解为XML。

    相关文章

      网友评论

          本文标题:xmlhttprequest详解

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