Ajax

头像
Snoopy
    阅读 4 分钟

    一、什么是Ajax

    Ajax的全称是Asynchronous JavaScript and XML,即异步JavaScript+XML。

    二、Ajax技术的核心

    Ajax技术的核心是XMLHttpRequest对象(简称XHR),使得浏览器可以发出HTTP请求与接收HTTP响应。
    XMLHttpRequest对象的主要属性有:
    onreadystatechange——每次状态改变所触发事件的事件处理程序。
    responseText——从服务器进程返回数据的字符串形式。
    responseXML——从服务器进程返回的DOM兼容的文档数据对象。
    status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
    status Text——伴随状态码的字符串信息。
    readyState——对象状态值。

    三、XHR 用法

    1. 创建Ajax核心对象XMLHttpRequest(记得考虑兼容性)

      clipboard.png

    2. 向服务器发送请求

      clipboard.png

      clipboard.png

      clipboard.png
      注意:POST请求一定要设置请求头的格式内容

      clipboard.png

      clipboard.png
      对于open方法,有几点需要注意:

      • URL是相对于当前页面的路径,也可以似乎用绝对路径。
      • open方法不会向服务器发送真正请求,它相当于初始化请求并准备发送。
      • 只能向同一个域中使用相同协议和端口的URL发送请求,否则会因为安全原因报错。
        真正能够向服务器发送请求需要调用send方法,并仅在POST请求可以传入参数,不需要则发送null,在调用send方法之后请求被发往服务器。

    请求发往服务器,服务器根据请求生成响应(Response),传回给XHR对象,在收到响应后相应数据会填充到XHR对象的属性,有四个相关属性会被填充:

    • responseText——从服务器进程返回数据的字符串形式。
    • responseXML——从服务器进程返回的DOM兼容的文档数据对象。
    • status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
    • status Text——伴随状态码的字符串信息。

    Http状态码:
    1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务器端错误--服务器未能实现合法的请求
    常见状态码:

    200 OK                     //客户端请求成功 
    400 Bad Request      //客户端请求有语法错误,不能被服务器所理解 
    401 Unauthorized    //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    403 Forbidden         //服务器收到请求,但是拒绝提供服务 
    404 Not Found        //请求资源不存在,eg:输入了错误的URL 
    500 Internal Server Error     //服务器发生不可预期的错误 
    503 Server Unavailable       //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    readyState——对象状态值。对象状态值有以下几个:

    • 0 - (未初始化)还没有调用send()方法
    • 1 - (载入)已调用send()方法,正在发送请求
    • 2 - (载入完成)send()方法执行完成
    • 3 - (交互)正在解析响应内容
    • 4 - (完成)响应内容解析完成,可以在客户端调用了

    在异步请求时,我们可以检查XHR对象的readyState属性,该属性表示请求/响应过程中的当前活动阶段,每当readyState值改变的时候都会触发一次onreadystatechange事件。
    我们可以利用这个事件检查每次readyState变化的值,当为4的时候表示所有数据准备就绪。
    有一点我们需要注意:必须在open方法之前指定onreadtstatechange事件处理程序。

    clipboard.png

    四、GET还是POST?

    与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
    然而,在以下情况中,请使用 POST 请求:

    • 无法使用缓存文件(更新服务器上的文件或数据库)
    • 向服务器发送大量数据(POST 没有数据量限制)
    • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

    五、HTTP请求

    1. HTTP之请求消息Request
      客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
      请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

      clipboard.png

      • POST请求例子

        POST / HTTP1.1 
        Host: www.wrox.com 
        User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) 
        Content-Type: application/x-www-form-urlencoded 
        Content-Length: 40 
        Connection: Keep-Alive 
        
        name=Professional%20Ajax&publisher=Wiley

        第一部分:请求行,第一行明了是post请求,以及http1.1版本。
        第二部分:请求头部,第二行至第六行。
        第三部分:空行,第七行的空行。第四部分:请求数据,第八行。

    2. HTTP之响应消息Response
      一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
      HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

      clipboard.png

      • 例子

        HTTP/1.1 200 OK Date: Fri, 22 May 2009 06:07:21 GMT Content-Type: text/html; charset=UTF-8 
        
        <html> 
            <head></head> 
            <body> 
                <!--body goes here--> 
            </body> 
        </html>

        第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
        第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
        第二部分:消息报头,用来说明客户端要使用的一些附加信息
        第二行和第三行为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
        第三部分:空行,消息报头后面的空行是必须的
        第四部分:响应正文,服务器返回给客户端的文本信息。
        空行后面的html部分为响应正文。


    Snoopy
    19 声望2 粉丝