首页 > 代码库 > AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)

AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)

《黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax》

\JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打包ajax生成小工具.avi;  有介绍;

个人理解:就是封装了 XMLHttpRequest 的请求方法;演变而成我们常用的 ajax;

 

=====原始的请求方式:

ajax发送异步请求(四步操作)1. 第一步(得到XMLHttpRequest)  * ajax其实只需要学习一个对象:XMLHttpRequest,如果掌握了它,就掌握了ajax!!!  * 得到XMLHttpRequest    > 大多数浏览器都支持:var xmlHttp = new XMLHttpRequest();    > IE6.0:var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");    > IE5.5以更早版本的IE:var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  * 编写创建XMLHttpRequest对象的函数  function createXMLHttpRequest() {      try {          return new XMLHttpRequest();      } catch(e) {          try {          return new ActiveXObject("Msxml2.XMLHTTP");      } catch(e) {          try {              return new ActiveXObject("Microsoft.XMLHTTP");          } catch(e) {              alert("哥们儿,你用的是什么浏览器啊?");              throw e;          }      }      }  }2. 第二步(打开与服务器的连接)  * xmlHttp.open():用来打开与服务器的连接,它需要三个参数:    > 请求方式:可以是GET或POST    > 请求的URL:指定服务器端资源,例如;/day23_1/AServlet    > 请求是否为异步:如果为true表示发送异步请求,否则同步请求!  * xmlHttp.open("GET", "/day23_1/AServlet", true);3. 第三步(发送请求)  * xmlHttp.send(null):如果不给可能会造成部份浏览器无法发送!    > 参数:就是请求体内容!如果是GET请求,必须给出null。4. 第四步()  * 在xmlHttp对象的一个事件上注册监听器:onreadystatechange  * xmlHttp对象一共有5个状态:    > 0状态:刚创建,还没有调用open()方法;     > 1状态:请求开始:调用了open()方法,但还没有调用send()方法    > 2状态:调用完了send()方法了;    > 3状态:服务器已经开始响应,但不表示响应结束了!    > 4状态:服务器响应结束!(通常我们只关心这个状态!!!)  * 得到xmlHttp对象的状态:    > var state = xmlHttp.readyState;//可能是0、1、2、3、4  * 得到服务器响应的状态码    > var status = xmlHttp.status;//例如为200、404、500  * 得到服务器响应的内容1    > var content = xmlHttp.responseText;//得到服务器的响应的文本格式的内容    > var content = xmlHttp.responseXML;//得到服务器的响应的xml响应的内容,它是Document对象了!  xmlHttp.onreadystatechange = function() {//xmlHttp的5种状态都会调用本方法      if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//双重判断:判断是否为4状态,而且还要判断是否为200          // 获取服务器的响应内容      var text = xmlHttp.responseText;      }  };====================================================================================第二例:发送POST请求(如果发送请求时需要带有参数,一般都用POST请求)* open:xmlHttp.open("POST" ....);* 添加一步:设置Content-Type请求头:  > xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");* send:xmlHttp.send("username=zhangSan&password=123");//发送请求时指定请求体

==老师封装的js--- ajaxutils.js

// 创建request对象function createXMLHttpRequest() {    try {        return new XMLHttpRequest();//大多数浏览器    } catch (e) {        try {            return ActvieXObject("Msxml2.XMLHTTP");//IE6.0        } catch (e) {            try {                return ActvieXObject("Microsoft.XMLHTTP");//IE5.5及更早版本                } catch (e) {                alert("哥们儿,您用的是什么浏览器啊?");                throw e;            }        }    }}/* * option对象有如下属性 */         /*请求方式*/method,         /*请求的url*/ url,         /*是否异步*/asyn,         /*请求体*/params,         /*回调方法*/callback,        /*服务器响应数据转换成什么类型*/typefunction ajax(option) {    /*     * 1. 得到xmlHttp     */    var xmlHttp = createXMLHttpRequest();    /*     * 2. 打开连接     */    if(!option.method) {//默认为GET请求        option.method = "GET";    }    if(option.asyn == undefined) {//默认为异步处理        option.asyn = true;    }    xmlHttp.open(option.method, option.url, option.asyn);    /*     * 3. 判断是否为POST     */    if("POST" == option.method) {        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    }    /*     * 4. 发送请求     */    xmlHttp.send(option.params);        /*     * 5. 注册监听     */    xmlHttp.onreadystatechange = function() {        if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//双重判断            var data;            // 获取服务器的响应数据,进行转换!            if(!option.type) {//如果type没有赋值,那么默认为文本                data =http://www.mamicode.com/ xmlHttp.responseText;            } else if(option.type == "xml") {                data = xmlHttp.responseXML;            } else if(option.type == "text") {                data = xmlHttp.responseText;            } else if(option.type == "json") {                var text = xmlHttp.responseText;                data = eval("(" + text + ")");            }                        // 调用回调方法            option.callback(data);        }    };};

在jsp中调用它:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP ‘json3.jsp‘ starting page</title>        <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">    --><script type="text/javascript" src="http://www.mamicode.com/"></script>  //引用<script type="text/javascript">window.onload = function() {    var btn = document.getElementById("btn");    btn.onclick = function() {        /*        1. ajax        */        ajax(            {                url:"<c:url value=http://www.mamicode.com/‘/AServlet‘/>",                type:"json",                callback:function(data) {                    document.getElementById("h3").innerHTML = data.name + ", " + data.age + ", " + data.sex;                }            }        );    };};</script>  </head>    <body><%-- 点击按钮后,把服务器响应的数据显示到h3元素中 --%><button id="btn">点击这里</button><h1>显示自己封装的ajax小工具</h1><h3 id="h3"></h3>  </body></html

======而现在标准的用法:

$(function(){    $(‘#send‘).click(function(){         $.ajax({             type: "GET",             url: "test.json",             data: {username:$("#username").val(), content:$("#content").val()},             dataType: "json",             success: function(data){                         $(‘#resText‘).empty();   //清空resText里面的所有内容                         var html = ‘‘;                         $.each(data, function(commentIndex, comment){                               html += ‘<div class="comment"><h6>‘ + comment[‘username‘]                                         + ‘:</h6><p class="para"‘ + comment[‘content‘]                                         + ‘</p></div>‘;                         });                         $(‘#resText‘).html(html);                      }         });    });});

===个人理解:其实就是调用了一个方法,方法里面填了参数而已(参数有一般类型 和 对象类型,方法类型)

AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)