AJAX和$.ajax的使用方式

什么是AJAX

ajax,全称Asynchronous JavaScript and XML,叫做异步请求,常用于做页面局部刷新
AJAX 不是新的编程语言,而是使用现有技术混合使用的一种新方法。ajax 中使用的技术有JavaScript, html , dom , xml ,css 等。主要是 JavaScript , XML.

JavaScript:使用脚本对象 XMLHttpRequest 发送请求, 接收响应数据
XML: 发送和接收的数据格式,现在使用 json

AJAX 不单需要前端的技术,同时需要后端(服务器)的配合。服务器需要提供数据,数据是 AJAX 请求的响应结果。

AJAX异步实现步骤

  1. 创建异步对象
    var xmlHttp = new XMLHttpRequest();
  2. onreadystatechange事件
xmlHttp.onreadystatechange = function(){
	if(xmlHttp.readyState ==4 xmlHttpstatus == 200){
		处理服务器返回的数据
	}
}

XMLHttpRequest 对象的三个重要的属性:
onreadystatechange 属性:一个 js 函数名 或 直接定义函数,每当 readyState 属性改变时,就会调用该函数
readyState 属性:存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
• 0: 请求未初始化,创建异步请求对象 var xmlHttp = new XMLHttpRequest()
• 1: 初始化异步请求对象, xmlHttp.open(请求方式,请求地址,true)
• 2: 异步对象发送请求, xmlHttp.send()
• 3: 异步对象接收应答数据 从服务端返回数据。XMLHttpRequest 内部处理。
• 4: 异步请求对象已经将数据解析完毕。 此时才可以读取数据。
status 属性:
200: “OK”,请求处理成功
404: 未找到页面
3. 初始化请求参数
xmlHttp.open(method,url,async)
method:请求的类型;GET 或 POST
url:服务器的 servlet 地址
async:true(异步)或 false(同步)
4. 发送请求
xmlHttp.send()
5. 接收服务器响应的数据
xmlHttp.responseText;
XMLHttpRequest对象的属性:
responseText:获得字符串形式的响应数据
responseXML:获得 XML 形式的响应数据

ajax实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用ajax</title>
    <script type="text/javascript">
        function search() {
            //获取proid
            var proid = document.getElementById("proid").value;
            //创建异步对象
            var xmlHttp = new XMLHttpRequest();
            //绑定事件
            xmlHttp.onreadystatechange = function () {
                //等待服务器端返回数据,请求成功后,在处理数据
                // xmlHttp.readyState == 4 : 从服务器端获取数据,在浏览器中解析数据成功。
                // xmlHttp.status ==200 请求处理成功
                if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    //获取服务器的数据
                    var resp = xmlHttp.responseText;
                    //把 json格式的字符串转为  js中的对象Object ,使用eval()
                    var obj = eval("("+ resp+")");
                    //更新页面数据
                    callback(obj);
                }
            }
            //初始化请求参数
            xmlHttp.open("get","searchJson?proid="+proid,true);
            //发送请求
            xmlHttp.send();
        }
        function callback(jsonobj) {
            //在XMLHttpRequest从服务端取回数据后,调用这个方法,
            //在这个方法中更新 页面dom中的数据
            document.getElementById("proname").value=jsonobj.name;
            document.getElementById("projiancheng").value=jsonobj.jiancheng;
            document.getElementById("proshenghui").value=jsonobj.shenghui;
        }
    </script>
</head>
<body>
  <div align="center">
      <form action="" method="post">
          <table border="1">
              <tr>
                  <td>省份编号:</td>
                  <td>
                      <input type="text" id="proid" value="">
                      <input type="button" onclick="search()" value="搜索">
                  </td>
              </tr>
              <tr>
                  <td>省份名称:</td>
                  <td><input type="text" id="proname" value="省名称"></td>
              </tr>
              <tr>
                  <td>省份简称:</td>
                  <td><input type="text" id="projiancheng" value="省份简称"></td>
              </tr>
              <tr>
                  <td>省会:</td>
                  <td><input type="text" id="proshenghui" value="省会名称"></td>
              </tr>
          </table>
      </form>
  </div>
</body>
</html>

$.ajax介绍

$.ajax有json格式的参数,各个参数以键值对的方式存在,各键值对以逗号分隔
$.ajax({
url:请求或请求地址,
type:请求方式post/get,
data :请求参数,可以以json格式传递参数,
dataType:预期服务器返回值类型。可以是xml,text,html,script,json,jsonp,但我们一般使用json,
success:function(result){ //result通常也会用resp代替
请求成功接收的返回值,和操作
}
})

更具体的用法可参考jquery在线手册

$.ajax实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>项目首页,处理jquery级联查询</title>
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //在页面dom对象加载完成后执行的,当前方法
            //访问servlet, 获取省份的json数据
            $.ajax({
                url:"queryProvince",
                type:"GET",
                dataType:"json",
                async:true,
                success:function (resp, staus, xhr) {
                    //resp:服务器端返回的数据
                    // [{"id":1,"name":"河北","jiancheng":"冀","shenghui":"石家庄"},{}]
                    // <option value="1">河北</option>
                    $.each(resp,function(i,n){
                        $("#province").append("<option value='"+n.id+"'>"+n.name+"</option>");
                    })
                },
                error:function (xhr,status,error) {
                    alert("请求错误:"+error);
                }
            })
            //给省份select, 绑定change事件
            $("#province").on("change",function(){
                //根据省份id,发起获取城市信息的ajax请求
                var proid = $("#province > option:selected").val();
                //当proid=0时不用发起请求
                if( proid == "0"){
                    alert("请选择一个省份");
                } else {
                    $.post("queryCity",{"proid":proid}, callback,"json")
                }
            })
        })
        function callback(result) {
            // 清楚历史数据
            $("#city").empty();
            //[{"id":1,"name":"石家庄市","proviceId":1},{}]
            $.each(result,function (i,n) {
                $("#city").append("<option value='"+n.id+"'>"+n.name+"</option>");
            })
        }
    </script>
</head>
<body>
    <div align="center">
        <p>juqery-ajax练习</p>
        省份列表:
        <select id="province">
            <option value="0">请选择省份</option>
        </select>
        <br>
        <br>
        城市列表:
        <select id="city">
            <option value="0">选择城市</option>
        </select>
    </div>
</body>
</html>
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值