ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
**1.传统javascript使用ajax方式:** ​ XMLHttpRequest对象:所有现代浏览器均支持XMLHttpRequest对象,XMLHttpRequest用于在后台与服务器交换数据。 ~~~js function getInfo() { var xmlhttp; if (window.XMLHttpRequest){ // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); }else{ // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ var str = xmlhttp.responseText; alert(str); } } xmlhttp.open("GET","/url",true); xmlhttp.send(); } ~~~ 使用 A JAX 的过程可以类比平常我们访问网页过程 - 创建一个 XMLHttpRequest 类型的对象 —— 相当于打开了一个浏览器 var xmlhttp=new XMLHttpRequest(); - 打开与一个网址之间的连接 —— 相当于在地址栏输入访问地址 xmlhttp.open("GET","/url",true); - 通过连接发送一次请求 —— 相当于回车或者点击访问发送请求 xmlhttp.send(); - 指定 xhr 状态变化事件处理函数 —— 相当于处理网页呈现后的操作 > xmlhttp.onreadystatechange = function () { > //通过 xmlhttp 的 readyState 判断此次请求的响应是否接收完成 > if (this.readyState === 4) { > //通过 xmlhttp的 responseText 获取到响应的响应体 > console.log(this) > } readyState从 0 到 4 发生变化。 - 0: 请求未初始化 - 1: 服务器连接已建立 - 2: 请求已接收 - 3: 请求处理中 - 4: 请求已完成,且响应已就绪 status为访问状态,404 页面没找到, 500 内部错误, 200访问正常等。 - 1xx  -消息: 请求正在处理,请稍后。。。 - 2xx -成功处理 - 3xx -重定向到其他地方: 需要客户端再次发送请求 - 4xx -客户端错误,eg: 非法的资源请求,禁止访问 - 5xx -服务器段错误 ,eg: 服务器抛出异常 在Java中将处理结果的字符串,一般是以JSON字符串返回,存储在前端xmlhttp.responseText中。 <br/> **2.jQuery写法:** jquery将上述写法进行了封装,使得我们更加简单和方便的去使用ajax。常见用法: ~~~js $.ajax(function(){ type: "post", url : "url", data: {"name":"Peter"}, success:function(data, status){ //处理 }, error:function(){ //error有三个参数,可以依据情况需要写 } ~~~ <br/> **3.$.ajax()** ``` window.onload = function(){ $.ajax({ type:"get", url:"xx", dataType:"json", success:function(data){ console.log(data); }, error:function(xhr){ document.body.innerHTML = xhr.status; } }) ``` <br/> **4.$.get()** ``` //$.get()语法 $.get(url,function(data,status){ //获取的data是一个JS对象 }).fail(function(data){ console.log(data.status) }) ``` <br/> **5.$.post()** ``` //$.post()语法 $.post(url,data,function(data,status){ }).fail(function(data){ console.log(data.status) }) ``` <br/> **6.应用** --- ~~~html public class ValidSameServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { //获得 ajax 发送的数据 String name = req.getParameter("username"); if("12345".equals(name{ resp.getWriter().print("yes"); }else{ resp.getWriter().print("no"); } } } <script type="text/javascript"> $(function(){ $("form input").blur(function(){ //离开焦点的 input 是哪个这个 this 就是哪个对象 var obj = $(this); var val = obj.val(); var reg = obj.attr("reg"); var tip = obj.attr("tip"); var name = obj.attr("name"); var regObj = new RegExp(reg); if(!regObj.test(val)){ //获得 username 紧挨着的下一个dom的jQuery对象 var spanObj = obj.next(); spanObj.html("<font color='red'>"+tip+"</font>"); }else{ var spanObj = obj.next(); if(name == "username"){ //ajax 的重复性校验 var result = validSame(val); if(result == "yes"){ spanObj.html("<font color='red'>用户名已经存在</font>"); }else{ spanObj.html(""); } }else{ spanObj.html(""); } } }); /*查询用户名是否重复,no 不重复,yes 重复*/ function validSame(val){ var isSame = "no"; $.ajax({ type:'post', url:'${path}/validsame', async:false, data:{username:val}, dataType:"text", success:function(result){ isSame = result; }, error:function(){ alert("系统错误"); } }); return isSame; } $("form input").focus(function(){ $(this).css("background","yellow"); }); //一边输入一边校验。 $("form input").keyup(function(event){ /* var num = window.event?event.keyCode : event.which;var charStr = String.fromCharCode(num); */ var obj = $(this); var val = obj.val(); var reg = obj.attr("reg"); var tip = obj.attr("tip"); var name = obj.attr("name"); var regObj = new RegExp(reg); if(!regObj.test(val)){ //获得 username 紧挨着的下一个 dom 的 jQuery 对象 var spanObj = obj.next(); spanObj.html("<font color='red'>"+tip+"</font>"); }else{ var spanObj = obj.next(); if(name == "username"){ //ajax 的重复性校验 var result = validSame(val); if(result == "yes"){ spanObj.html("<font color='red'>用户名已经存在</font>"); }else{ spanObj.html(""); } }else{ spanObj.html(""); } } }); /* $("#regist").click(function(){ //设置一个提交表单的标志 var isSubmit = true; $("form input").each(function(){ var obj = $(this); var val = obj.val(); var reg = obj.attr("reg"); var tip = obj.attr("tip"); var regObj = new RegExp(reg); if(!regObj.test(val)){ //获得 username 紧挨着的下一个 dom 的 jQuery 对象 var spanObj = obj.next(); spanObj.html("<font color='red'>"+tip+"</font>"); isSubmit =false; }else{ var spanObj = obj.next(); spanObj.html(""); } }) if(isSubmit){ //表单提交 $("#myform").submit(); } }) */ $("#myform").submit(function(){ var isSubmit =true; $("form input").each(function(){ var obj = $(this); var val = obj.val(); var reg = obj.attr("reg"); var tip = obj.attr("tip"); var name = obj.attr("name"); var regObj = new RegExp(reg); if(!regObj.test(val)){ //获得 username 紧挨着的下一个 dom 的 jQuery 对象 var spanObj = obj.next(); spanObj.html("<font color='red'>"+tip+"</font>"); isSubmit =false; }else{ var spanObj = obj.next(); if(name == "username"){ //ajax 的重复性校验 var result = validSame(val); if(result == "yes"){ spanObj.html("<font color='red'>用户名已经存在</font>"); isSubmit =false; }else{ spanObj.html(""); } }else{ spanObj.html(""); } } }) //阻止表单提交,如果是 true 就允许表单提交 return isSubmit; }); $("#gender").change(function(){ //获得改变后的值 var val = $(this).val(); alert(val) }); $("body").keydown(function(event){ var num = window.event?event.keyCode : event.which; if(num == 13){ var isSubmit = true; $("form input").each(function(){ var obj = $(this); var val = obj.val(); var reg = obj.attr("reg"); var tip = obj.attr("tip"); var name = obj.attr("name"); var regObj = new RegExp(reg); if(!regObj.test(val)){ //获得 username 紧挨着的下一个 dom 的 jQuery 对象 var spanObj = obj.next(); spanObj.html("<fontcolor='red'>"+tip+"</font>"); isSubmit =false; }else{ var spanObj = obj.next(); if(name == "username"){ //ajax 的重复性校验 var result = validSame(val); if(result == "yes"){ spanObj.html("<font color='red'>用户名已经存在</font>"); isSubmit =false; }else{ spanObj.html(""); } }else{ spanObj.html(""); } } }) if(isSubmit){ //表单提交 $("#myform").submit(); } } }); }) </script> </head> <body><form id="myform" action="${path }/jsp2/tab.jsp" method="post"> <p> 用户名:<input id="username" name="username" type="text"reg="^\d{3,5}$" tip="请输入 3 到 5 位的数字"> <span></span> </p> <p>密码:<input name="password" type="password" reg="^\w{6,8}$" tip="请输入 6 到 8位的英文或者数字或_"><span></span> </p> <p>地址:<input name="address" type="text" reg="^.{0,50}$" tip="请输入 50 个字符"><span></span></p> <p>性别:<select id="gender"> <option value="1">男</option> <option value="2">女</option> </select><span></span> </p> <p><input type="submit" value="注册" id="regist"></p> </form> </body> ~~~