简述Ajax,以及使用原生js书写Ajax案例

简介: 简述Ajax,以及使用原生js书写Ajax案例

Ajax,这里的第一个字母A值的是asynchronous,意思是异步的,j值的就是JavaScript,第二个a是and,x值的是xml

合在一起就是 异步的javascript和xml


什么是异步的?


跟java中的同步(synchronized)是相反的。什么是同步呢?以前的服务器请求,都必须是第一个请求结束了,第二个请求才能开始,第二个请求结束了,才能开始第三个请求。


什么是异步呢,异步就是第一个请求发出之后,不用等待第一个请求的结果,整个页面不会刷新。第一个请求没有结束的情况下我可以发出第二个请求。

ajax可以实现无刷新技术对服务器的请求。


无刷新,就减少了页面一晃而逝的等待时间,用户的体验会更好,并且有效的利用了带宽资源。


如何实现Ajax呢?


js中有一个核心对象,XmlHttpRequest。这个是ajax的核心类,通过这个对象我们就可以创建ajax并通过他的方法发送请求。

他有两个重要的方法:

open()方法可以跟tomcat服务器上的请求建立连接。

send():让js代码发出reqeust请求。


ajax怎么接受服务器端的响应?


XmlHttpRequest对象有这样的几个属性:


readyState = =0: XmlHttpRequest刚被创建

readyState= =1:XmlHttpRequest准备发出请求

readyState= =2:服务器开始解析请求

readyState= =3:服务器开始做出响应

readyState= =4:响应接收。


status= =400:携带数据有问题

status= =404:没有找到服务器

status= =500:服务器内部出错

status= =200:服务器响应了正常的数据


通过以上这些就可以创建出Ajax 的第一个案例:


例如:注册时候当我们的鼠标光标离开用户名输入框的时候就提示该用户名是否可以注册。

jsp页面和发送Ajax请求的js代码如下所示:

<html>
  <head>
    <title>$Title$</title>
    <script type="text/javascript">
      function doAjax(){
          //1.创建出ajax核心对象XmlHttpRequest
          var xhr=new XMLHttpRequest();
          //2.建立连接,第一参数是请求的类型,第二参数,请求谁。
          var username=document.getElementById("username").value;
          xhr.open("get","${pageContext.request.contextPath}/user/regist.do?name="+username);
          //3.ajax的回调函数,告知xhr做完服务器端事情后,做什么
          xhr.onreadystatechange=function(){
              //表示xhr得到了响应
              if(xhr.readyState==4){
                  //服务器响应的状态码,响应的数据是正常的。
                  if(xhr.status==200){
                      //服务器端响应的0或者1
                      var result=xhr.responseText;
                      if(result=="0"){
                          //在span里面增加错误提醒
                          document.getElementById("mess").innerHTML="用户名已存在";
                      }else{
                          document.getElementById("mess").innerHTML="该用户可以注册";
                      }
                  }
              }
          }
          //4.发出请求
          xhr.send();
      }
    </script>
  </head>
  <body>
  <form>
    用户名:<input type="text" name="username" onblur="doAjax()" id="username"/><span id="mess"></span><br/>
    密码:<input type="password"/><br/>
    <input type="submit"/><br/>
  </form>
  </body>
</html>

请求的服务器端代码为:

此时返回的不再是一个页面,而是通过输出流返回一个字符:

package com.baizhi.action;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/regist")
    //这个方法时接收ajax请求的,响应的数据不是一个jsp,而是一个标记。0:不可以注册,1:可以注册
    public void regist(String name, HttpServletResponse response) throws IOException {
        System.out.println("-------------------"+name+"----------------------");
        //通过response的out给用户响应信息。
        PrintWriter out = response.getWriter();
        //判断收的name是否是zhangsan,是的话就响应0.不是的话就响应1
        if(name.equalsIgnoreCase("zhangsan")){
            out.print("0");
        }else{
            out.print("1");
        }
        out.flush();
    }
}

这样就完成了一个原生js实现的ajax操作,但这其中有太多太多重复性代码了,使用jQuery开发ajax会使我们的代码优化许多,下一篇讲解.

目录
相关文章
|
4月前
|
数据采集 Web App开发 JavaScript
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
|
1月前
|
数据采集 前端开发 JavaScript
虎扑APP数据采集:JavaScript与AJAX的结合使用
虎扑APP数据采集:JavaScript与AJAX的结合使用
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
3月前
|
移动开发 前端开发 JavaScript
js之ajax |12-6
js之ajax |12-6
|
3月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
44 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
2月前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
38 0
|
4月前
|
JavaScript 前端开发 UED
Javaweb之javascript的小案例的详细解析
通过上述步骤,我们得到了一个动态更新的实时时钟,这个简单的JavaScript案例展示了定时器的使用方法,并讲解了如何处理日期和时间。这个案例说明了JavaScript在网页中添加动态内容与交互的能力。对于涉足JavaWeb开发的学习者来说,理解和运用这些基础知识非常重要。
42 11
|
4月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
44 0
|
4月前
|
JavaScript 前端开发 API
从零开始学表单操作,jQuery 与原生 JavaScript 完全指南,带你轻松掌握网页交互关键!
【8月更文挑战第31天】在网页开发中,表单是实现用户互动的关键元素。无论是收集信息、提交数据还是验证输入,都需要对表单进行有效操作。本文档介绍了如何使用原生 JavaScript 和 jQuery 操作表单,包括获取表单元素、读写表单值、处理表单提交及验证等核心功能。jQuery 提供了更简洁的语法和更好的兼容性,但原生 JavaScript 在性能上有优势。选择合适的方法取决于项目需求和个人偏好。下面通过具体示例展示了两种方式的操作方法。
42 0
|
4月前
|
JavaScript 前端开发 网络协议