javaWeb之ajax

Ajax:一种异步数据请求的技术,在本页面不刷新的情况,本页面数据可以和服务器端进行通信

核心对象: xmlHttp 浏览器对象。因为是基于浏览器,使用ajax技术时,不须任何插件,
原理:
1 当本页面浏览器加载完成时,并操作完成时,当面页面没有刷新的情况下,页面数据还在进行,
2 cpu 内存都在运行, cpu 内存分配一部分资源出来,通过浏览器对象,把本页面数据传出,再通过浏览器对象,把须要数据传入。
ajax开发过程:
1 创建一个xmlHttp
2 通过open的方式创建一个请求,一种路径,将要用于发 收 数据的路径。
3 设置回调状态,来判断是否通信成功
状态细分
0 未初始化
1 正在请求中
2 请求完成
3 请求完成后数据开始传输
4 数据通信成功
200 客户端收到了服务器发回的数据

4 把整个流程通过send发出去
这四步是有序的。

我这里使用的是js操作 之所以没用juery是想先学低层点的

例如验证码的生成

tel:<input type="text" name="tel" id="tel" />
<input type="button" name="takeCode" id="takeCode" onclick="getTel()" value="获取验证码"/>
code:<input type="text" name="code" id="code" />

然后开始写js

第一步是要写一个获取到浏览器http对象的函数

function getXhr() {//得到xmlHttp 浏览器对象
        var xhr = null;
        if (window.XMLHttpRequest){//winxp的获取
            xhr = new XMLHttpRequest();
        }else {//xp以上的获取
            xhr = new ActiveXObject('Microsoft.XMLHttp');
        }
        return xhr;
    }

然后获取到对象了
通过open的方式创建一个请求

    function getTel() {
        var xhr = getXhr();//1.获取对象
        var tel = document.getElementById("tel").value;
        //alert(tel);
        xhr.open("get","getIn.do?tel="+tel,true);//open打开连接请求 这里可以使用get或者post
        xhr.onreadystatechange = function () {//当状态改变时
            if (xhr.readyState==4&&xhr.status==200){//readyState=4是数据通信成功  status==200是客户端收到了服务器发回的数据
                document.getElementById("code").value = xhr.responseText;//是服务器返回的数据
            }
        }
        xhr.send();//最后一定要发送

    }

这里会发送出请求 我们需要配置好servlet然后检查
然后写

   public void service( HttpServletRequest request,HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("UTF-8");//设置编码格式
        response.setContentType("text/html;charset=UTF-8");
        String uri = request.getRequestURI();//获取uri
        uri = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
        if (uri.equals("/getIn")){
            PrintWriter writer = response.getWriter();
            String tel = request.getParameter("tel");
            if (tel.length()==11){
                writer.print(getRandom(6));
            }else {
                writer.print("电话格式不对");
            }
        }
        }
 private String getRandom(int n){
        Random random = new Random();
        StringBuilder randomNum = new StringBuilder();//使用stringBuilder是应为比string优点更多
        for (int i = 0;i<n;i++){
            randomNum.append(random.nextInt(10));
        }
        return randomNum.toString();
    }

最后看一下效果
在这里插入图片描述
在这里插入图片描述

然后post和get的区别

post更加安全

使用稍有不同

第一点 open不用加传的数据

xhr.open("post","getIn.do",true);

要传的数据需要写在send中 例如

 xhr.send("tel="+tel);

然后还需要设置头部请求

xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

就这样 运行效果和get相同

然后结合学习做了一个小作业

由于最近学习Android 刚好也是要用到城市选择 所以就做了 然后顺带做了api 输出json

在这里插入图片描述

地址:省份json
默认是显示所有省份

在这里插入图片描述

地址:http://www.zhongxia5211.cn:8089/learnAjax_war/api.do?provinceId=1
注:
provinceId=1 是省份的id为1下所有的城市

在这里插入图片描述

地址:http://www.zhongxia5211.cn:8089/learnAjax_war/api.do?cityId=20

cityId=20是 城市id为20下的所有县

不知道不是我数据库插入写的不好的原因 部分数据没有插入

在这里插入图片描述

在这里插入图片描述

地址:http://www.zhongxia5211.cn:8089/learnAjax_war/cityChoose.jsp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于 AJAX 的级联下拉菜单可以按照以下步骤进行: 1. 引入 jQuery 库和 AJAX 请求的相关库。 ```html <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.min.js"></script> ``` 2. 在页面上定义两个下拉菜单,一个是父级菜单,一个是子级菜单。 ```html <select id="parent" name="parent" onchange="getChildren()"> <option value="">请选择父级菜单</option> <option value="1">菜单1</option> <option value="2">菜单2</option> <option value="3">菜单3</option> </select> <select id="child" name="child"> <option value="">请选择子级菜单</option> </select> ``` 3. 编写 AJAX 请求的代码,获取子级菜单的数据,并根据数据动态生成子级菜单的选项。 ```javascript function getChildren() { var parentId = $("#parent").val(); if (parentId == "") { $("#child").html("<option value=''>请选择子级菜单</option>"); return; } $.ajax({ type: "GET", url: "/menu/getChildren", data: { parentId: parentId }, dataType: "json", success: function (data) { var html = "<option value=''>请选择子级菜单</option>"; $.each(data, function (i, item) { html += "<option value='" + item.id + "'>" + item.name + "</option>"; }); $("#child").html(html); }, error: function () { alert("请求失败,请稍后再试!"); } }); } ``` 4. 在后台编写获取子级菜单数据的代码,并返回 JSON 格式的数据。 以上就是基于 AJAX 的级联下拉菜单的实现步骤。需要注意的是,后台返回的子菜单数据应该是以 JSON 格式返回,前端通过 AJAX 请求获取到数据后,需要动态生成子级菜单的选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值