Ajax进阶一

第一:什么是Ajax.
AJAX(Asynchronous Javascript And XML)翻译为中文就是异步的JavaScript和xml,他是利用JavaScript语言和服务进行异步的交互,利用xml进行数据的传输。当然他的数据传输布置xml一种。

第二:Ajax的优点和缺点。
AJAX还有一个最大的特点就是,在服务器响应的时候,不可以局部刷新html页面,不用全部刷新,让用户感觉不到页面的刷新。
Ajax的优点:(1)可以使用JavaScript和服务器进行异步刷新。
(2)可以局部刷新html页面
Ajax的缺点:(1)就是和服务器交互太多导致服务器的压力过大。
第三:什么是同步,什么是异步。
同步交互:客户端发出一个请求后,需要在服务器端响应之后,才能发送第二个请求
异步交互:客户端发出一个请求后,无需等待服务器响应,就能立马发送第二个请求。
第四: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,如果这里为get请求,url后边还可以添加参数。
    请求是否为异步:如果为true表示发送异步请求,否则同步请求!

  3. xmlHttp.open(“GET”, “/day23_1/AServlet”, true),如果是post请求,则需要把GET改为POST。
  4. 注意:当我们的请求是post请求的时候我们还要设置请求头
  5. xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    因为POST请求必须设置ContentType请求头的值为application/x-www.form-encoded。表单的enctype默认值就是为application/x-www.form-encoded!因为默认值就是这个,所以大家可能会忽略这个值!当设置了
    的enctype=” application/x-www.form-encoded”时,等同与设置了Cotnent-Type请求头。
    但在使用AJAX发送请求时,就没有默认值了,这需要我们自己来设置请求头:
  6. 第三步(发送请求)

    • xmlHttp.send(null):如果不给可能会造成部份浏览器无法发送!

    参数:就是请求体内容!如果是GET请求,必须给出null(因为get的请求参数在url后边添加)。如果不为null则可能在火狐浏览器的情况下导致请求不能正常发送。如果为post请求那么参数在这里应该给出。

  7. 第四步(注册监听器)

    • 在xmlHttp对象的一个事件上注册监听器:onreadystatechange
    • xmlHttp对象一共有5个状态:

    0状态:刚创建,还没有调用open()方法;
    1状态:请求开始:调用了open()方法,但还没有调用send()方法
    2状态:调用完了send()方法了;
    3状态:服务器已经开始响应,但不表示响应结束了!
    4状态:服务器响应结束!(通常我们只关心这个状态!!!)

  8. 得到xmlHttp对象的状态:
    var state = xmlHttp.readyState;//可能是0、1、2、3、4
  9. 得到服务器响应的状态码
    var status = xmlHttp.status;//例如为200、404、500
  10. 得到服务器响应的内容1
    var content = xmlHttp.responseText;//得到服务器的响应的文本格式的内容
    var content = xmlHttp.responseXML;//得到服务器的响应的xml响应的内容,它是Document对象了!

  11. xmlHttp.onreadystatechange = function() {//xmlHttp的5种状态都会调用本方法
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//双重判断:判断是否为4状态,而且还要判断是否为200
    // 获取服务器的响应内容
    var text = xmlHttp.responseText;
    }
    };
    示例代码如下:(使用该示例代码通过点击页面上的button,向服务器发送异步请求,返回一个responseText到我们的页面)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<html>

  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting pagetitle>
    <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">
    
  head>
<script type="text/javascript">
  //获取xmlhttpequest对象
  function createXmlHttpRequest(){
  try {
    return new XMLHttpRequest();
} catch (e) {
    try {
        return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            return alert("你的浏览器类型不支持");
            throw e;
        }
    }
}



  }
  //html在加载完成之后就调用方法
  window.onload=function (){(这个的方法说实话不太明白,希望各位大神在评论区里指导一下)
  //获取btn
  var btn=document.getElementById("btn");
  //给btn的点击事件注册一个监听器
  btn.onclick=function (){

  //ajax的四步操作,得到服务器的相应
  //1.获取xmlhttprequest的对象
  var xmlhttp=createXmlHttpRequest();
  //2.打开与服务器的连接,需要是哪个参数
  xmlhttp.open("GET","/AjaxWeb/Aservlet",true);
  //3.建立链接
  xmlhttp.send(null);
  //4.在xmlhttp上边注册监听事件
  xmlhttp.onreadystatechange=function (){
  if(xmlhttp.readyState==4 && xmlhttp.status==200){
    var text=xmlhttp.responseText;
    var h1=document.getElementById("h1");
    h1.innerHTML=text;
  }
  }
  }
  }
script>


  <body>
   <button id="btn">点击提交button>
   <h1 id="h1">h1>
  body>
html>

你可能感兴趣的:(js,ajax,javascript,异步)