• AJAX---发送POST请求、Get请求、请求四步、解决低版本的缓存问题


    目录

    一、readyState状态值的理解

    二、第一个AJAX请求详解

    发送AJAX四步

    发送Get请求

    解决低版本IE浏览器的AJAX的Get缓存问题

    AJAX发送POST请求

    AJAX案例:POST请求验证用户名是否可用


    一、readyState状态值的理解

    二、第一个AJAX请求详解

    HTTP常见状态码: 200成功  404资源找不到   500表示服务器内部错误

    发送AJAX四步

    1.第一步:创建AJAX核心对象XMLHttpRequest
           var xhr = new XMLHttpRequest();
    2.第二步:注册回调函数   readystate状态码一改变,这里就执行回调函数(重要)

       当状态码等于4的时候,我们要做一些操作了

    1. xhr.onreadystatechange = function (){
    2. //这里的回调函数会被调用多次 0-1 1-2 2-3 3-4 一共调用四次
    3. //console.log(xhr.readyState)
    4. //也可以写成xhr.readyState
    5. if(this.readyState ==4){
    6. // console.log("响应结束了")
    7. //下面是http状态码
    8. if(this.status==4){
    9. alert("对不起,您访问的资源不存在,请检查请求路径")
    10. }else if(this.status ==500){
    11. alert("对不起,服务器发生了严重的内部错误,请联系管理员")
    12. }else if(this.status ==200){
    13. alert("响应成功,完美")
    14. // 通过XMLHttpRequest对象获取响应的信息,通过对象的responseText属性获取相应信息(以字符串的形式
    15. // alert( this.responseText)
    16. document.getElementById("mydiv").innerText=this.responseText
    17. }
    18. }
    19. }
    3.开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
    1. // open(method,url,async,user,psw)
    2. // method规定请求get或post asynv:true(异步—)false(同步)
    3. // user:可选的用户名称 psw:可选的密码
    4. // 用户名和密码是进行身份认证的,说明想要访问这个服务器上的资源,可能需要提供一些口令才能访问,需不需要用户名和密码,主要看服务器
    5. xhr.open("GET","/ajax/ajaxrequest1",true)
    6. //ajax是项目名
     4.发送请求
    xhr.send();

      后端代码

    1. @WebServlet("/ajaxrequest1")
    2. public class RequestServlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    5. response.setContentType("text/html;charset=UTF-8");
    6. //Servlet向浏览器响应一段数据
    7. PrintWriter out = response.getWriter();
    8. //out对象向浏览器输出信息
    9. //这个对象打印输出以后,前端的XMLHttpRequest对象就会接收到
    10. //out后面可以是普通文本 JSON HTML XML
    11. out.print("welcome to study ajax!!!");
    12. }
    13. }

    发送Get请求

    1. // 3.开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
    2. //获取用户填写的usercode和username
    3. var usercode = document.getElementById("usercode").value
    4. var username = document.getElementById("username").value
    5. xhr.open("GET","/ajax/ajaxrequest2?usercode="+usercode+"&username="+username,true)
    1. @Override
    2. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    3. response.setContentType("text/html;charset=UTF-8");
    4. //Servlet向浏览器响应一段数据
    5. PrintWriter out = response.getWriter();
    6. String usercode=request.getParameter("usercode");
    7. String username=request.getParameter("username");
    8. out.print("usercode="+usercode+"username="+username);
    9. }

    解决低版本IE浏览器的AJAX的Get缓存问题

         下面我们是添加的一个时间戳,当然也可以添加一个随机数

    1. //时间戳
    2. xhr.open("GET","/ajax/ajaxrequest2?t="+new Date().getTime()+"&usercode="+usercode+"&username="+username,true)

    AJAX发送POST请求

     xhr.open("POST","/ajax/ajaxrequest3",true)
    1. // 4.发送请求
    2. //模拟form变淡提交的关键代码(这段代码一定要在open之后提交)
    3. xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
    4. // 放到send()这个函数小括号当中的数据,会自动在请求体当中提交数据
    5. // 使用js代码获取
    6. var username = document.getElementById("username").value
    7. var password = document.getElementById("password").value
    8. xhr.send("username="+username+"&password="+password)
    1. @Override
    2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    3. response.setContentType("text/html;charset=UTF-8");
    4. //Servlet向浏览器响应一段数据
    5. PrintWriter out = response.getWriter();
    6. //获取提交的数据
    7. String username = request.getParameter("username");
    8. String password = request.getParameter("password");
    9. out.print("username="+username+"password="+password);
    10. }

    AJAX案例:POST请求验证用户名是否可用

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>POST验证title>
    6. head>
    7. <body>
    8. 用户名:<input type="text" id="uname">
    9. <span id="tipMsg">span>
    10. <script>
    11. window.onload = function () {
    12. //失去焦点函数
    13. document.getElementById("uname").onblur = function () {
    14. var xhr = new XMLHttpRequest();
    15. xhr.onreadystatechange = function () {
    16. if(this.readyState==4){
    17. if(this.status ==200){
    18. document.getElementById("tipMsg").innerHTML = this.responseText
    19. }else{
    20. alert(this.status)
    21. }
    22. }
    23. }
    24. xhr.open("POST", "/ajax/ajaxrequest5", true)
    25. xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
    26. var uname = document.getElementById("uname").value
    27. // var password = document.getElementById("password")
    28. xhr.send("uname="+uname)
    29. }
    30. }
    31. script>
    32. body>
    33. html>

    1. @WebServlet("/ajaxrequest5")
    2. public class RequestServlet5 extends HttpServlet {
    3. @Override
    4. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    5. // 标记
    6. boolean flag = false;
    7. // 获取用户名
    8. String uname = request.getParameter("uname");
    9. // 连接数据库
    10. Connection conn = null;
    11. PreparedStatement ps = null;
    12. ResultSet rs = null;
    13. try {
    14. // 1.注册驱动
    15. Class.forName("com.mysql.cj.jdbc.Driver");
    16. // 2.获取连接
    17. conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ajax?serverTimezone=GMT","root","admin");
    18. // 3.获取预编译的数据库操作对象
    19. String sql = "select id,name from t_user where name=?";
    20. ps=conn.prepareStatement(sql);
    21. ps.setString(1,uname);
    22. // 4.执行SQL语句
    23. rs = ps.executeQuery();
    24. // 5.处理结果集
    25. if(rs.next()){
    26. // 用户名已经存在
    27. flag=true;
    28. }else {
    29. flag=false;
    30. }
    31. } catch (ClassNotFoundException e) {
    32. e.printStackTrace();
    33. } catch (SQLException e) {
    34. e.printStackTrace();
    35. } finally {
    36. // 6.释放资源
    37. if(rs!=null){
    38. try {
    39. rs.close();
    40. } catch (SQLException e) {
    41. e.printStackTrace();
    42. }
    43. }
    44. if(ps!=null){
    45. try {
    46. ps.close();
    47. } catch (SQLException e) {
    48. e.printStackTrace();
    49. }
    50. }
    51. if(conn!=null){
    52. try {
    53. conn.close();
    54. } catch (SQLException e) {
    55. e.printStackTrace();
    56. }
    57. }
    58. }
    59. // 相应结果到浏览器
    60. response.setContentType("text/html;charset=UTF-8");
    61. PrintWriter out = response.getWriter();
    62. if(flag){
    63. // 用户名存在
    64. out.print("对不起,用户名已存在 ");
    65. }else{
    66. // 用户名不存在
    67. out.print("用户名可以使用 ");
    68. }
    69. }
    70. }

  • 相关阅读:
    render-props和高阶组件
    FSC商标门户网站重置密码操作指南
    【Java从入门到精通】Java异常处理
    ETL数据转换方式有哪些
    JavaSE反射前置之Properties类
    Pyside6 QTextEdit
    1.8 Elasticsearch建立IK中文分词器
    2023-09-14 mysql-Item_subselect-分析
    tcp网络编程——2
    如何将镜像体积海量缩减
  • 原文地址:https://blog.csdn.net/weixin_51351637/article/details/126891307