<!-- 客户端代码实现 -->

    <!DOCTYPE html>    <html>    <head>    <meta charset="UTF-8">    <title>Insert title here</title>    </head>    <body>    <!-- html要害表单元素设计    -->    <h1>The Ajax 03 Page</h1>   <!-- 该标签的作用是把表单中的相干控件集中起来,造成一个控件组    -->    <fieldset>   <!--该标签用于定义fieldset标签控件组下的题目      -->    <legend>Ajax 表单申请</legend>    <form>        <input type="text" name="name" id="nameId" onblur="doCheck()" onfocus="doClear()">        <input type="button" onclick="doSave()" value="save">    </form>    <span id="result"></span>    </fieldset>    <!--增加JS要害业务代码    -->    <!-- script标签用于定义客户端脚本  script元素既能够蕴含脚本语句,也能够通过 src 属性指向内部脚本文件。-->    <script type="text/javascript">    function doClear(){    document.getElementById("result").innerHTML="";    }     //检测名字是否曾经存在    //Get办法的个性    function doCheck(){    var url="/doCheck";    var name=document.forms[0].name.value;    var params="name="+name;    doAjaxGet(url.params,function(result){        document.getEmlementById("result").innerHTML=result;    })    }    //在业务办法中利用封装好的代码,保留业务的要害客户端代码剖析及实现    function doSave(){    var url="/doSave";    var params="name="+document.forms[0].name.value;    //发送申请    doAjaxGet(url,params,function(result){        document.getElementById("result").innerHTML=result;    })    }      //封装共性,提取个性    //提取get办法的共性进行封装:    function doAjaxGet(url,params,callback){    const xhr=new XMLHttpRequest();    xhr.onreadstatechange=function(){        if(xhr.onreadyState==4&&xhr.status==200){            callback(xhr.responseText);        }    }    xhr.open("GET",url+"?"+params,true);    xhr.send(null);    }     </script>    </body>    </html>

服务端代码实现:

package com.cy.ajaxcontroller;import java.util.ArrayList;import java.util.List;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;//这是一个服务端,用来解决客户端的申请@Controller@RequestMapping("/")public class AjaxController {    private List<String> names=new ArrayList<String>();    //如果这是存储数据的表    @RequestMapping("doSave")    @ResponseBody     //将客户端申请的数据name写入到names对应的汇合    public String doSave(String name){        System.out.println("name="+name);         names.add(name);          return name+"save ok";     }    @RequestMapping("doCheck")    @ResponseBody     //通过此办法测验名字是否曾经存在     public String doCheck(String name) {        if(names.contains(name))         return "名字:"+name+"曾经存在,请抉择其余名字";         return "名字:"+name+"不存在,能够注册";     }}