• Ajax:js绑定事件、ajax发送Get请求



    目录:

    (1)js按钮实现绑定事件:

    (2)ajax发送get请求详细过程:

    (3)ajax Get请求提交数据:

    (4) Http状态信息总结


    (1)js按钮实现绑定事件:

    test.html:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>先能看懂下面这个代码,再学习AJAX。title>
    6. head>
    7. <body>
    8. <script type="text/javascript">
    9. function sayHello(){
    10. alert("hello javascript")
    11. }
    12. script>
    13. <input type="button" value="hello" onclick="sayHello()">
    14. <input type="button" value="hello2xxxxxxxxxxxxxxx" id="helloBtn">
    15. <script type="text/javascript">
    16. // 页面加载完毕之后,给id="helloBtn"的元素绑定鼠标单击事件
    17. // 这个function就是一个回调函数,这个回调函数什么时候执行?当load事件发生之后,这个回调函数才会执行。
    18. // 什么是load事件?load事件什么时候发生?注意:页面加载完毕之后,load事件发生。
    19. window.onload = function(){
    20. // 获取id="helloBtn"的对象
    21. var helloBtn = document.getElementById("helloBtn");
    22. // 给id="helloBtn"元素绑定click事件
    23. // 这个function也是一个回调函数,这个回调函数什么时候执行?
    24. // 当helloBtn被click的时候,被鼠标单击的时候,这个回调函数会执行。
    25. // 鼠标单击五次,这个回调函数就会被调用五次。
    26. helloBtn.onclick = function(){
    27. //alert("hello javascript2")
    28. //alert(this)
    29. // 这个回调函数中的this是谁呢?
    30. // this是发生事件的事件源对象。是按钮发生了鼠标单击,那么this代表的就是这个按钮对象。
    31. alert(this.value)
    32. }
    33. }
    34. script>
    35. body>
    36. html>

    点击hello 

     点击hello2xxxxxxxx

    Ajax发送请求需要一个核心的对象:XMLHttpRequest对象,浏览器内置了这个对象,现代浏览器都是支持的

    readyState: 表明请求和响应的处理过程

     

     

     (2)ajax发送get请求详细过程:

    ajaxGet.html:分为4步过程

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>ajax get请求title>
    6. head>
    7. <body>
    8. <script type="text/javascript">
    9. window.onload = function(){
    10. document.getElementById("helloBtn").onclick = function (){
    11. // 发送ajax get请求
    12. //console.log("发送ajax get请求")
    13. // 1.第一步:创建AJAX核心对象XMLHttpRequest
    14. var xhr = new XMLHttpRequest();
    15. // 2.第二步:注册回调函数
    16. // 这是一个回调函数,这个函数在XMLHttpRequest对象的readyState状态值发生改变的时候被调用。
    17. xhr.onreadystatechange = function (){
    18. // 这里的回调函数会被调用多次。
    19. // 0 -> 1 被调用一次
    20. // 1 -> 2 被调用一次
    21. // 2 -> 3 被调用一次
    22. // 3 -> 4 被调用一次
    23. //console.log(xhr.readyState) 会输出0-4
    24. // 当XMLHttpRequest对象的readyState的状态是4的时候,表示响应结束了。下方的this表示xhr
    25. /*if (xhr.readyState == 4) {
    26. }*/
    27. if (this.readyState == 4) {
    28. // 响应结束了。
    29. //console.log("响应结束了")
    30. // 响应结束之后,一般会有一个HTTP的状态码。
    31. // HTTP状态码常见的包括:200表示成功了,404表示资源找不到,500表示服务器内部错误。
    32. // HTTP状态码是HTTP协议的一部分,HTTP协议中规定的。服务器响应之后都会有一个状态码。
    33. // 获取HTTP状态码
    34. //console.log("HTTP响应状态码:" + this.status)
    35. if (this.status == 404) {
    36. alert("对不起,您访问的资源不存在,请检查请求路径")
    37. } else if(this.status == 500){
    38. alert("对不起,服务器发生了严重的内部错误,请联系管理员")
    39. } else if(this.status == 200){
    40. //alert("响应成功,完美")
    41. // 200表示完全响应完毕,成功结束了。
    42. // 通过XMLHttpRequest对象获取响应的信息。
    43. // 通过XMLHttpRequest对象的responseText属性来获取响应的信息。
    44. //alert(this.responseText)
    45. // 把响应信息放到div图层当中,渲染
    46. document.getElementById("mydiv").innerHTML = this.responseText
    47. }
    48. }
    49. }
    50. // 3.第三步:开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
    51. // XMLHttpRequest对象的open方法
    52. // open(method, url, async, user, psw)
    53. // method: 请求的方式,可以是GET,也可以是POST,也可以是其它请求方式。
    54. // url:请求的路径
    55. // async: 只能是true或者false,true表示此ajax请求是一个异步请求,false表示此ajax请求是一个同步请求。(大部分请求都是true,要求异步。极少数情况需要同步,以后再说。)
    56. // user:用户名 pwd: 密码,用户名和密码是进行身份认证的,说明要想访问这个服务器上的资源,可能需要提供一些口令才能访问。需不需要用户名和密码,主要看服务器的态度。
    57. xhr.open("GET", "/ajax/ajaxrequest1", true);
    58. // 4.第四步:发送请求
    59. xhr.send()
    60. }
    61. }
    62. script>
    63. <input type="button" value="hello ajax" id="helloBtn">
    64. <div id="mydiv">div>
    65. body>
    66. html>

    AjaxRequestServlet:

    1. package com.bjpowernode.ajax.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. @WebServlet("/ajaxrequest1")
    10. public class AjaxRequestServlet extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    13. throws ServletException, IOException {
    14. /*String s = null;
    15. s.toString();
    16. 返回500
    17. */
    18. // Servlet向浏览器响应一段数据
    19. PrintWriter out = response.getWriter();
    20. // out对象向浏览器输出信息
    21. // 服务器的代码实际上和以前的代码还是完全一样的。
    22. // 只不过这个out在响应的时候,浏览器客户端的XMLHttpRequest对象会接收到这个响应的信息。
    23. out.print("welcome to study ajax!!!!");
    24. }
    25. }

    点击按钮:

      

    ajaxGet3.html:单独写一个函数callback,然后再调用

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>发送ajax get请求title>
    6. head>
    7. <body>
    8. <script type="text/javascript">
    9. //1. 创建AJAX核心对象
    10. var xhr = new XMLHttpRequest();
    11. window.onload = function () {
    12. document.getElementById("btn").onclick = function () {
    13. //2. 注册回调函数
    14. xhr.onreadystatechange = callback
    15. //3. 开启通道
    16. xhr.open("GET", "/ajax/ajaxrequest2", true)
    17. //4. 发送请求
    18. xhr.send()
    19. }
    20. }
    21. function callback(){
    22. if(xhr.readyState == 4){
    23. if (xhr.status == 200) {
    24. document.getElementById("mydiv").innerHTML = xhr.responseText
    25. }else{
    26. alert(xhr.status)
    27. }
    28. }
    29. }
    30. script>
    31. <button id="btn">发送ajax get请求button>
    32. <div id="mydiv">div>
    33. body>
    34. html>

    AjaxRequest22Servlet:

    1. package com.bjpowernode.ajax.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. @WebServlet("/ajaxrequest22")
    10. public class AjaxRequest22Servlet extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    13. throws ServletException, IOException {
    14. // 设置响应的内容类型以及字符集
    15. response.setContentType("text/html;charset=UTF-8");
    16. // 获取响应流
    17. PrintWriter out = response.getWriter();
    18. // 响应
    19. out.print("用户名已存在!!!");
    20. }
    21. }

     

    (3)ajax Get请求提交数据:

    ajaxGet2.html:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>发送ajax get请求title>
    6. head>
    7. <body>
    8. <script type="text/javascript">
    9. window.onload = function () {
    10. document.getElementById("btn").onclick = function () {
    11. //1. 创建AJAX核心对象
    12. var xhr = new XMLHttpRequest();
    13. //2. 注册回调函数
    14. xhr.onreadystatechange = function(){
    15. if (this.readyState == 4) {
    16. if (this.status == 200) {
    17. // 通过XMLHttpRequest对象的responseText属性可以获取到服务器响应回来的内容。
    18. // 并且不管服务器响应回来的是什么,都以普通文本的形势获取。(服务器可能响应回来:普通文本、XML、JSON、HTML...)
    19. // innerHTML属性是javascript中的语法,和ajax的XMLHttpRequest对象无关。
    20. // innerHTML可以设置元素内部的HTML代码。(innerHTML可以将后面的内容当做一段HTML代码解释并执行)
    21. //document.getElementById("myspan").innerHTML = this.responseText
    22. document.getElementById("mydiv").innerHTML = this.responseText
    23. // innerText也不是AJAX中的,是javascript中的元素属性,和XMLHttpRequest无关。
    24. // innerText也是设置元素中的内容,但是即使后面是一段HTML代码,也是将其看做一个普通字符串设置进去。
    25. //document.getElementById("myspan").innerText = this.responseText
    26. }else{
    27. alert(this.status)
    28. }
    29. }
    30. }
    31. //3. 开启通道
    32. // 获取到用户填写的usercode和username
    33. var usercode = document.getElementById("usercode").value
    34. var username = document.getElementById("username").value
    35. //xhr.open("GET", "/ajax/ajaxrequest2?usercode="+usercode+"&username="+username, true)
    36. // 避免低版本的IE浏览器,走缓存,搞一个时间戳
    37. //alert(new Date().getTime())
    38. //xhr.open("GET", "/ajax/ajaxrequest2?t="+new Date().getTime()+"&usercode="+usercode+"&username="+username, true)
    39. //或者加一个随机数,解决缓存问题
    40. xhr.open("GET", "/ajax/ajaxrequest2?t="+Math.random()+"&usercode="+usercode+"&username="+username, true)
    41. //4. 发送请求
    42. xhr.send()
    43. }
    44. }
    45. script>
    46. usercode<input type="text" id="usercode"><br>
    47. username<input type="text" id="username"><br>
    48. <button id="btn">发送ajax get请求button>
    49. <span id="myspan">span>
    50. <div id="mydiv">div>
    51. body>
    52. html>

      控制器:AjaxRequest2Servlet:

    1. package com.bjpowernode.ajax.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. @WebServlet("/ajaxrequest2")
    10. public class AjaxRequest2Servlet extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    13. throws ServletException, IOException {
    14. // 设置响应的内容类型以及字符集
    15. response.setContentType("text/html;charset=UTF-8");
    16. // 获取响应流
    17. PrintWriter out = response.getWriter();
    18. // 响应
    19. //out.print("用户名已存在!!!");
    20. // 获取ajax get请求提交的数据
    21. String usercode = request.getParameter("usercode");
    22. String username = request.getParameter("username");
    23. out.print("usercode=" + usercode + ", username=" + username);
    24. }
    25. }

     

    (4) Http状态信息总结

  • 相关阅读:
    零基础学Java(1)初识Java程序
    首个校园招聘年度盛宴,数百万人关注,牛客2022青年人才招聘峰会来啦!
    uni-app 中的 picker 组件基于后台对象数组数据格式的使用
    关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
    如何限制word文件中部分内容无法编辑
    C++ 继承
    【算法】【递归与动态规划模块】矩阵的最小路径和
    9. seatunnel-incubating-2.1.2安装部署
    Oracle数据库 on duplicate key update功能
    《STM32Cube高效开发教程基础篇》- 安装软件/Demo3_1LED
  • 原文地址:https://blog.csdn.net/dengfengling999/article/details/125904277