Ajax学习

原创 2017年08月12日 13:28:57

本篇博客知识点
1.Ajax技术介绍
2.Ajax用GET、POST两种方式提交的主要代码
3.AJax技术封装成JS

Ajax技术介绍

           全称: Asynchronized(异步) Javascript And  Xml
               技术组成: Javascript, DOM, CSS 和  XMLHttpRequest(ActiveObject)对象

         xhr.readyState:
            0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 
            1 (初始化) 对象已建立,尚未调用send方法 
            2 (发送数据) send方法已调用,但是当前的状态及http头未知 
            3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误, 
            4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 

Ajax用GET、POST两种方式提交的主要代码

GET方式主要代码

<script type="text/javascript">
        // 以下是GET方式的Ajax
        function check1(obj){
            var name = obj.value;
            //1.创建一个Ajax对象
            var xhr = null;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else{
                xhr = new ActiveObjcet("Microsoft.XNLHttp");
            }
            //2.设置通讯方式和地址
            var url = "<c:url value='/AjaxServlet?name="+name+"'/>";
            xhr.open("GET", url, "true"); // true--表示异步,false---表示同步
            //3.设置放回成功后的JS对象(回调函数)---就是校验后后台有个结果过来
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){ // 0--未初始化 1--初始化 2 发送数据 3数据发送中 4.数据发送完成
                    if(xhr.status ==200){ // 200说明没有挂
                        var txt = xhr.responseText; // 后台发来的结果
                        succ(txt);
                    }
                }
            };
            //4.发送动作的触发
            xhr.send(null);

        }
        </script>

POST方式主要代码

<script type="text/javascript">
 //POST方式的Ajax
    function check2(obj){
            var pwd = obj.value;

           //1创建一个ajax对象
           var xhr=null;
           if(window.XMLHttpRequest){//看看浏览器是否认识该对象---IE7之后,火狐,google等支持
               xhr = new XMLHttpRequest();
           }else{//IE6及以下,其它大部分旧版本的浏览器
               xhr = new ActiveObject("Microsoft.XMLHttp");
           }

           //2 设置通讯方式和地址 //※※※
           var url="<c:url value='/AjaxServlet'/>";
           xhr.open("POST", url, true); //异步 ---并行
           //xhr.open("POST", url, false); //同步  ---串行

           //3 设置访问成功后的js对象(回调函数)
           xhr.onreadystatechange = function(){
               //alert(xhr.readyState);
               if(xhr.readyState==4){
                   if(xhr.status==200){//正常应答
                       var txt = xhr.responseText;
                       //alert("后台返回的信息:"+txt);
                       succ2(txt);
                   }
               }

           };

           //※※※※POST方式必须要设置Content-Type响应头※※※※※
           xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           //4 发送(动作的触发)
           xhr.send("pwd="+pwd); //※※※POST方式时,要向后台提交参数,写在该方法的参数中(前面的url后不带参数)

           //alert("OK");
        }
    function succ2(obj){
        div2.innerHTML = obj;
    };
    </script>

AJax技术封装成JS


/*
 * var ajax = new Ajax();
 * ajax.get();
 */

function Ajax(obj){
             this.get= function(url,succ,fail){
                    //1.创建一个Ajax对象
                    var xhr = null;
                    if(window.XMLHttpRequest){
                        xhr = new XMLHttpRequest();
                    }else{
                        xhr = new ActiveObjcet("Microsoft.XNLHttp");
                    }
                    //2.设置通讯方式和地址
                    xhr.open("GET", url, "true"); // true--表示异步,false---表示同步
                    //3.设置放回成功后的JS对象(回调函数)---就是校验后后台有个结果过来
                    xhr.onreadystatechange = function(){
                        if(xhr.readyState == 4){ // 0--未初始化 1--初始化 2 发送数据 3数据发送中 4.数据发送完成
                            if(xhr.status ==200){ // 200说明没有挂
                                var txt = xhr.responseText; // 后台发来的结果
                                succ(txt);
                            }else{
                                fail(xhr.status);
                            }
                        }
                    };
                    //4.发送动作的触发
                    xhr.send(null);
                };
                this.post = function(url,data,succ2,fail){
                       //1创建一个ajax对象
                       var xhr=null;
                       if(window.XMLHttpRequest){//看看浏览器是否认识该对象---IE7之后,火狐,google等支持
                           xhr = new XMLHttpRequest();
                       }else{//IE6及以下,其它大部分旧版本的浏览器
                           xhr = new ActiveObject("Microsoft.XMLHttp");
                       }

                       //2 设置通讯方式和地址 //※※※
                       xhr.open("POST", url, true); //异步 ---并行
                       //xhr.open("POST", url, false); //同步  ---串行

                       //3 设置访问成功后的js对象(回调函数)
                       xhr.onreadystatechange = function(){
                           //alert(xhr.readyState);
                           if(xhr.readyState==4){
                               if(xhr.status==200){//正常应答
                                   var txt = xhr.responseText;
                                   //alert("后台返回的信息:"+txt);
                                   succ2(txt);
                               }else{
                                   fail(xhr.status);
                               }
                           }

                       };

                       //※※※※POST方式必须要设置Content-Type响应头※※※※※
                       xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                       //4 发送(动作的触发)
                       xhr.send(data); //※※※POST方式时,要向后台提交参数,写在该方法的参数中(前面的url后不带参数)
                };
    }

我练习的主要代码
调用有两个方式—未封装和封装过的,当时Servlet代码都是一样的

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneServlet extends HttpServlet {
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        System.out.println("get-ajax来了....");
        String name = request.getParameter("name");

        //int i = 10/0;

//      try {
//          Thread.sleep(3000);
//      } catch (InterruptedException e) {
//          e.printStackTrace();
//      }


        out.println(name+"你好,来访时间是:"+ sdf.format(new Date()));
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        System.out.println("post-ajax来了....");
        String name = request.getParameter("name");

        out.println(name+"你好,来访时间是:"+ sdf.format(new Date()));
    }

}

未封装前的 调用
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Ajax技术演示</title>
    <script type="text/javascript">
       //把name编辑框中的名字用get-ajax提交到后台进行校验,看看是否可用
       function check1(obj){
           var name = obj.value;

           //1创建一个ajax对象
           var xhr=null;
           if(window.XMLHttpRequest){//看看浏览器是否认识该对象---IE7之后,火狐,google等支持
               xhr = new XMLHttpRequest();
           }else{//IE6及以下,其它大部分旧版本的浏览器
               xhr = new ActiveObject("Microsoft.XMLHttp");
           }

           //2 设置通讯方式和地址
           var url="<c:url value='/OneServlet?name="+name+"'/>";
           xhr.open("GET", url, true); //异步 ---并行
           //xhr.open("GET", url, false); //同步  ---串行

           //3 设置访问成功后的js对象(回调函数)
           xhr.onreadystatechange = function(){
               //alert(xhr.readyState);

               if(xhr.readyState==4){
                   if(xhr.status==200){//正常应答
                       var txt = xhr.responseText;
                       //alert("后台返回的信息:"+txt);
                       succ(txt);
                   }
               }

           };

           //4 发送(动作的触发)
           xhr.send(null); //GET方式时,参数为null。如果要向后台提交参数,则写在url地址中

           //alert("OK");
       }

       function succ(txt){
           div1.innerHTML=txt;
       }


       /*以下是POST方式ajax技术的代码*/
       //把name编辑框中的名字用post-ajax提交到后台进行校验,看看是否可用
       function check2(obj){
           var name = obj.value;

           //1创建一个ajax对象
           var xhr=null;
           if(window.XMLHttpRequest){//看看浏览器是否认识该对象---IE7之后,火狐,google等支持
               xhr = new XMLHttpRequest();
           }else{//IE6及以下,其它大部分旧版本的浏览器
               xhr = new ActiveObject("Microsoft.XMLHttp");
           }

           //2 设置通讯方式和地址 //※※※
           var url="<c:url value='/OneServlet'/>";
           xhr.open("POST", url, true); //异步 ---并行
           //xhr.open("POST", url, false); //同步  ---串行

           //3 设置访问成功后的js对象(回调函数)
           xhr.onreadystatechange = function(){
               //alert(xhr.readyState);
               if(xhr.readyState==4){
                   if(xhr.status==200){//正常应答
                       var txt = xhr.responseText;
                       //alert("后台返回的信息:"+txt);
                       succ2(txt);
                   }
               }

           };

           //※※※※POST方式必须要设置Content-Type响应头※※※※※
           xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

           //4 发送(动作的触发)
           xhr.send("name="+name); //※※※POST方式时,要向后台提交参数,写在该方法的参数中(前面的url后不带参数)

           //alert("OK");
       }

       function succ2(txt){
           div2.innerHTML=txt;
       }       
      </script>   
  </head>

  <body>
    <form action="" method="post">
        <h3>GET方式的ajax技术演示</h3> <br/>
        Name:<input type="text" name="name" onblur="check1(this);"/>
        <div id="div1"></div> <br/>

         <h3>POST方式的ajax技术演示</h3> <br/>
        Name:<input type="text" name="name" onblur="check2(this);"/>
        <div id="div2"></div> <br/>

        Pwd:<input type="text" name="pwd"/><br/>
        Email:<input type="text" name="email"/><br/>
        <input type="submit" value="注册"/>
   </form>

   <br/><br/>
    <a href="jsps/ajax2.jsp">封装后的ajax技术演示</a>

  </body>
</html>

下面是封装后的Ajax

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Ajax技术演示</title>

    <script type="text/javascript">
      function Person(name,age){
           this.name = name;
           this.age = age;
           this.show = function(){
               alert(this.name+","+this.age);
           };
           this.setAge = function(age){
               this.age = age;
           };
      }

      function demo(){
          var p = new Person("Jack",22);
          p.show();

          p.setAge(25);
          p.show();
      }
    </script>

    <script type="text/javascript" src="<c:url value='ajax.js'/>"></script>

    <script type="text/javascript">
        function check1(obj){
           var name = obj.value;
           var url="<c:url value='/OneServlet?name="+name+"'/>";
           var ajax = new Ajax();
           ajax.get(url, succ, failure);
        }
        function succ(txt){
           div1.innerHTML=txt;
        }
        function failure(obj){
            alert("服务器响应的错误信息代码:"+obj);
        }

    </script>

    <script type="text/javascript">
        function check2(obj){
           var data = "name="+obj.value;
           var url="<c:url value='/OneServlet'/>";
           var ajax = new Ajax();
           ajax.post(url,data, succ2, failure);
        }
        function succ2(txt){
           div2.innerHTML=txt;
        }
    </script>

  </head>

  <body>
    <h3>封装后的Ajax技术演示</h3>
    <button onclick="demo();">函数封装技术复习</button>

    <form action="" method="post">
        <h3>GET方式的ajax技术演示</h3> <br/>
        Name:<input type="text" name="name" onblur="check1(this);"/>
        <div id="div1"></div> <br/>

         <h3>POST方式的ajax技术演示</h3> <br/>
        Name:<input type="text" name="name" onblur="check2(this);"/>
        <div id="div2"></div> <br/>

        Pwd:<input type="text" name="pwd"/><br/>
        Email:<input type="text" name="email"/><br/>
        <input type="submit" value="注册"/>
   </form>

  </body>
</html>
版权声明:本文为博主原创文章,大家一起学习进步。

如何将数据库的表导出生成Excel?

本篇博客知识点 1.如何通过元数据拿到数据库的信息? 2.如何用Java生成Excel表? 3.将数据库中的表导出生成Excel案例如何通过元数据拿到数据库的信息 元数据:描述数据的数据 J...

把 mysql中的一个字段修改为自增张类型

如何实现MySQL设置自增字段是许多人都问到的问题,下面就为您介绍MySQL设置自增字段的相关知识,希望对您学习MySQL数据库能有所启迪。 MySQL设置自增字段的相关语句: alter...

Ajax&amp;Json学习笔记

  • 2017年08月01日 23:24
  • 30KB
  • 下载

xml与ajax学习

  • 2015年06月17日 23:34
  • 32KB
  • 下载

SpringMVC学习笔记:Ajax与Controller的参数交互

在SpringMVC的开发中,前端和后端的开发是必须掌握的知识点,无论是form提交还是Ajax提交,梳理好相关知识,在开发过程中将游刃有余。本博文旨在整理归纳,以备查用。...

ajax学习课件

  • 2017年06月05日 14:22
  • 1.65MB
  • 下载

利用 jQuery UI 和 Ajax 创建可定制的 Web 界面(Portlet) (学习备份)

如今,网站比以往更具可定制性,允许用户更改其空间,根据自己的喜好对其进行个性化。个性化的主页或仪表板页面(例如 iGoogle、MyYahoo! 和 MyAOL)日渐普及,大多数 Web 应用程序内甚...

Ajax学习总结

  • 2015年10月13日 16:16
  • 35B
  • 下载

Ajax的学习

  • 2014年10月27日 15:54
  • 692KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ajax学习
举报原因:
原因补充:

(最多只允许输入30个字)