zoukankan      html  css  js  c++  java
  • AJAX以及XMLHttpRequest

    AJAX技术

    概念:源自百度百科 — — AJAX(Asynchronous Javascript And XML)

    简单概括一下:

    • AJAX是web编程的技术,不是一门新的编程语言
    • AJAX充当了客户端与服务器之间的中间人,通过异步(也可同步,但降低用户体验,不提倡)来做HTTP的GET与POST请求操作。
    • AJAX通过一个对象XMLHttpRequest来实现异步通信的(核心)

    XMLHttpRequest对象

    API:XMLHttpRequest接口文档

     主要属性和方法

    ①创建对象

    var xhr         //此时xhr相当于客户端与服务器之间的中间人   
    if(window.XMLHttpRequest)   //IE6.0 和 IE5.5中,window没有XMLHttpRequest属性
    {
        xhr = new XMLHttpRequest();
    }
    else if(window.ActiveXObject) //IE6.0 和 IE5.5中,用此方法创建
    {
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    ②向服务器发送请求

    一般客户端向服务器发送请求为GET和POST两种,,在XMLHttpRequest对象中,通过以下方法实现:

    • xhr.open() — — 初始化请求,相当于在发送请求前,对请求的方法、链接等进行配置。
    xhr.open(method, url, async)
    -----------------------------
    //method:有GET、POST等HTTP请求方法
    //url:向服务器请求资源的url
    //async:是否异步请求。true为异步、false为同步
    • xhr.send()  — — 在open方法中配置完后,通过此方法发送请求。如果是异步请求(默认为异步请求,即open()中,async参数为true),则此方法会在请求发送后立即返回;如果是同步请求,则此方法直到响应到达后才会返回。
    ------------GET----------------
    
    //将参数配置到url中
    xhr.open('GET', 'Http://www.jaykoo.com/index.php?foo=bar&lorem=ipsum', true)
    
    xhr.send()
    
    
    ------------POST----------------
    
    xhr.open('POST', 'Http://www.jaykoo.com/index.php', true)
    
    xhr.setRequestHeader("Content-type","application/json; charset=utf-8")
    
    //将参数放置在HTTP内容中进行POST请求
    //send(body),一般要把传送的数据放在body中
    xhr.send('foo=bar&lorem=ipsum')

    看完上面的 send() 操作,有以下两个疑问(待解决):

    • 1、xhr.setRequestHeader()是什么?
    • 2、为什么GET与POST请求的参数,前者放在url中,后者放在send的请求内容体中?

    ③请求状态的变化以及响应事件

    AJAX请求分为几个阶段,在XMLHTTPRequest中通过readystate属性来指定不同的阶段状态。当状态改变时会通过onreadystatechange属性来调用回调函数,对不同阶段状态的改变作出响应操作。

    • xhr.readystate
    • xhr.onreadystatechange = callback

    readystate

    状态值 描述
    0 XMLHttpRequest 代理已被创建, 但尚未调用 open() 方法。
    1 open() 方法已经被触发。在这个状态中,可以通过  setRequestHeader() 方法来设置请求的头部, 可以调用 send() 方法来发起请求。
    2 send() 方法已经被调用,响应头也已经被接收。
    3 响应体部分正在被接收。如果 responseType 属性是“text”或空字符串, responseText 将会在载入的过程中拥有部分响应数据。
    4 请求操作已经完成。这意味着数据传输已经彻底完成或失败。

    onreadystatechange

    看属性名就可知道,当readystate属性状态值变化时,xhr马上回调用onreadystatechange定义的回调函数。

    (readystatechange其实是xhr的注册事件,onreadystatechange其实是对事件的响应)

    xhr.onreadystatechange = function(){
        if(xhr. readystate = 4){
            /* do something */
        }
    }

    通过readystate状态值,可以对XMLHttpRequest的请求响应状态进行判断。但却无法判断服务器返回的响应报文中,HTTP的状态码(例如常见的,200成功,403服务器拒绝请求,404页面资源无法找到等)。这里XMLHttpRequest对象中用status属性来得到响应状态码的值。

    status

    返回了XMLHttpRequest响应中的数字状态码。status对应在服务器响应报文中标准的HTTP响应码。若在响应前或是XMLHttpRequest出错时,status的值为0

  • 相关阅读:
    CLR的黑暗面——栈与引用对象
    delegate的另类玩法
    一个比较bt的xslt
    关于string
    jQuery核心讲解
    Linux环境进程间通信(二):信号(上)
    ubuntu10.10 轻松安装 Nvidia 官方驱动
    Linux环境进程间通信(二): 信号(下)
    Linux 信号signal处理机制
    java.lang.ProcessBuilder类和java.lang.Process类
  • 原文地址:https://www.cnblogs.com/jaykoo/p/10028009.html
Copyright © 2011-2022 走看看