JavaWeb = Ajax使用详解

Ajax的全称是:Asynchronous JavaScript And XML,指的是异步 JavaScript 及 XML(其实主要用的就是javascript技术),它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。 Ajax的特点是异步 ,比如可以使用Ajax更新局部网页、使用Ajax在不刷新页面的情况下查询数据、验证用户注册的用户名是否唯一等。

一.Ajax

1. 概念: ASynchronous JavaScript And XML    异步的JavaScript 和 XML

AJAX = 异步的javascript和XML(Asynchronous Javascript and XML)

它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

对于传统的网页,如果想更新内容,那么必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。在这个过程中,页面实际上是在后台与服务器进行了数据交互,获得数据之后,再利用JavaScript改变页面,这样页面内容就会更新了。(微博页面加载过程的例子,加载一会 下方才会出现内容,这其实就是Ajax加载的过程。)

简言之,在不重载整个网页的情况下,AJAX通过后台加载数据,并在网页上进行显示。

通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON - 同时您能够把这些外部数据直接载入网页的被选元素中。

    1. 异步和同步:客户端和服务器端相互通信的基础上

  •  客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
  • 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。 
  • Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
            通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
  • 传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
  • 提升用户的体验

2.Ajax的关键元素:

  •     JavaScript语言:Ajax技术的主要开发语言;
  •     XML / SON / HTML等:用来封装请求或响应的数据格式;
  •     DOM文档对象模型:通过 DOM 属性或方法修改页面元素,实现页面局部刷新;
  •     CSS:改变样式,美化页面效果,提升用户体验度;
  •     Ajax 引擎 :即 XMLHttpRequest 对象,以异步方式在客户端与服务器端之间传递数据   

3.实现方式:

原生方式与jQuery方式:

1. 创建ajax对象
		let xhr = new XMLHttpRequest();

2. 告诉ajax请求方式和请求地址
		xhr.open(请求方式,请求地址);

3. 发送请求
		xhr.send();

4. 获取服务器返回的数据
		xhr.οnlοad=function(){
            xhr.responseText;
		}


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>js的原生ajax</title>
    <style>
        span{
            color: red;
        }
    </style>
</head>
<body>
<input id="username" type="text" placeholder="请输入用户名"> <span id="userwarn"></span>

<script>
    document.getElementById('username').οnblur=function () {
        console.log(this.value);
        // 1.创建ajax对象
        let xhr = new XMLHttpRequest();
        // 2.告诉ajax请求方式和请求地址
        xhr.open('get','http://localhost:8080/check?username='+this.value)
        // 3.发送请求
        xhr.send();
        // 4.获取服务器返回数据
        xhr.οnlοad=function () {
            console.log(xhr.responseText);// 返回的字符串
            document.getElementById('userwarn').innerText=xhr.responseText;
        }
    }
</script>
</body>
</html>

JQuery的Ajax插件

* 语法:
		$.ajax({name:value,name:value})
	
* 参数:
		url:请求地址
		type:请求方式  (get:大小有限制、post:大小没有限制)
		data:请求参数
		success:请求成功时,执行的回调函数
		-------
		error:请求失败时,执行的回调函数
		dataType:预期服务器返回的数据类型:text、json


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>jq的ajax函数</title>
    <script src="../js/jquery-3.2.1.min.js"></script>
    <style>
        span{
            color: red;
        }
    </style>
</head>
<body>
<input id="username" type="text" placeholder="请输入用户名"><span id="userwarn"></span>

<script>
    // 给文本框绑定失去焦点事件
    $('#username').blur(function () {
        // 使用ajax函数发送请求
        $.ajax({
            url:"http://localhost:8080/check",
            type:"post",
            data:"username="+$(this).val(),
            success:function (resp) {
                // 实现局部刷新
                $('#userwarn').text(resp);
            },
            error:function () {
                alert('服务器繁忙,请稍后重试...')
            },
           // dataType:"json"  // 相当于把 json字符串 转为了json对象
        })
    })
</script>
</body>
</html>
	
1. 原生的JS实现方式
				 //1.创建核心对象
	            var xmlhttp;
	            if (window.XMLHttpRequest)
	            {// code for IE7+, Firefox, Chrome, Opera, Safari
	                xmlhttp=new XMLHttpRequest();
	            }
	            else
	            {// code for IE6, IE5
	                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	            }
	
	            //2. 建立连接
	            /*
	                参数:
	                    1. 请求方式:GET、POST
	                        * get方式,请求参数在URL后边拼接。send方法为空参
	                        * post方式,请求参数在send方法中定义
	                    2. 请求的URL:
	                    3. 同步或异步请求:true(异步)或 false(同步)
	
	             */
	            xmlhttp.open("GET","ajaxServlet?username=tom",true);
	
	            //3.发送请求
	            xmlhttp.send();
	
	            //4.接受并处理来自服务器的响应结果
	            //获取方式 :xmlhttp.responseText
	            //什么时候获取?当服务器响应成功后再获取
	
	            //当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
	            xmlhttp.onreadystatechange=function()
	            {
	                //判断readyState就绪状态是否为4,判断status响应状态码是否为200
	                if (xmlhttp.readyState==4 && xmlhttp.status==200)
	                {
	                   //获取服务器的响应结果
	                    var responseText = xmlhttp.responseText;
	                    alert(responseText);
	                }
	            }

	
2. JQeury实现方式

		1. $.ajax()
			* 语法:$.ajax({键值对});
			 //使用$.ajax()发送异步请求
	            $.ajax({
	                url:"ajaxServlet1111" , // 请求路径
	                type:"POST" , //请求方式
	                //data: "username=jack&age=23",//请求参数
	                data:{"username":"jack","age":23},
	                success:function (data) {
	                    alert(data);
	                },//响应成功后的回调函数
	                error:function () {
	                    alert("出错啦...")
	                },//表示如果请求响应出现错误,会执行的回调函数
	
	                dataType:"text"//设置接受到的响应数据的格式
	            });
		2. $.get():发送get请求
			* 语法:$.get(url, [data], [callback], [type])
				* 参数:
					* url:请求路径
					* data:请求参数
					* callback:回调函数
					* type:响应结果的类型

		3. $.post():发送post请求
			* 语法:$.post(url, [data], [callback], [type])
				* 参数:
					* url:请求路径
					* data:请求参数
					* callback:回调函数
					* type:响应结果的类型

    4.jquery-ajax方法详解:

    方法一:jquery的$.ajax()方法

参数如下:

1.url:
要求为String类型的参数,(默认为当前页地址)发送请求的地址。

2.type:
要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

3.timeout:
要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。

4.async:
要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。

5.cache:
要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。

6.data:
要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。

7.dataType:
要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。

8.beforeSend:
要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 }

9.complete:
要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 }

10.success:
要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 }

11.error:
要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 }

12.contentType:
要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。

13.dataFilter:
要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; }

14.dataFilter:
要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; }

15.global:
要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。

16.ifModified:
要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。

17.jsonp:
要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

18.username:
要求为String类型的参数,用于响应HTTP访问认证请求的用户名。

19.password:
要求为String类型的参数,用于响应HTTP访问认证请求的密码。

20.processData:
要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。

21.scriptCharset:
要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用

方法二.jquery的get()方法

$.get() 方法通过 HTTP GET 请求从服务器上请求数据

语法:$.get(URL,callback);

url参数规定你请求的路径,是必需参数,callback参数为数据请求成功后执行的函数

                $.get('./data/getJSON.json',function(data,status){
    console.log(status);   //success    200状态码 ok的意思              
})

 语法:
		$.get(url,success);
		
参数:
		url:请求地址
		success:请求成功时的回调函数

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>jq的get函数</title>
    <script src="../js/jquery-3.2.1.min.js"></script>
    <style>
        span{
            color: red;
        }
    </style>
</head>
<body>
<input id="username" type="text" placeholder="请输入用户名"><span id="userwarn"></span>

<script>
    // 给文本框绑定失去焦点事件
    $('#username').blur(function () {
        // 使用get函数发送
        let url = 'http://localhost:8080/check?username='+$(this).val();
        $.get(url,function (resp) {
            // 局部刷新
            $('#userwarn').text(resp);
        });
    })
</script>
</body>
</html>

方法三..jquery的post()方法

与get()方法相比,post()方法多用于以POST方式向服务器发送数据,服务器接收到数据之后,进行处理,并将处理结果返回页面

语法:$.post(URL,data,callback);

url参数规定你请求的路径,是必需参数,可选的data参数是连同请求发送的数据。可选的callback参数为数据请求成功后执行的函数
 $.post('/index',{name:'张'},function(data,status){
      console.log(status);

 })

语法:
		$.post(url,data,success);
		
 参数:
		url:请求地址
		data:请求参数
		success:请求成功时的回调函数

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>jq的post函数</title>
    <script src="../js/jquery-3.2.1.min.js"></script>
    <style>
        span{
            color: red;
        }
    </style>
</head>
<body>
<input id="username" type="text" placeholder="请输入用户名"><span id="userwarn"></span>

<script>
    // 给文本框绑定失去焦点事件
    $('#username').blur(function () {
        // 使用post函数发送请求
        let url='http://localhost:8080/check';
        let data='username='+$(this).val();
        $.post(url,data,function (resp) {
            // 局部刷新
            $('#userwarn').text(resp);
        })
    })
</script>
</body>
</html>

注:ajax:异步提交和页面局部刷新的技术

二.案例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>输入搜索</title>
    <script type="text/javascript" src="../lib/jquery-3.4.1.js"></script>
    <style type="text/css">
        .content{
            margin: 200px auto;
            width: 650px;
            text-align: center;
        }
        img{
            margin-bottom: 80px;
        }
        input[type="text"]{
            width: 530px;
            height: 45px;
            font-size: 16px;
        }
        input[type="button"]{
            width: 100px;
            height: 48px;
            background-color: lightgray;
            color: #000;
            font-size: 15px;
        }
        #show{
            position: absolute;
            width: 530px;
            border: 1px solid lightgray;
            border-top: 0px;
            margin-left: 5px;
        }

    </style>
</head>
<body>
<div class="content">
    <img src="./img/logo.png" alt="">
    <input type="text" id="search" name="keyword">
    <input type="button" value="搜索一下">
    <div id="show" style="display: none"></div>
</div>

<script type="text/javascript">
    $("body").click(function () {
        $("#show").hide();
    })

    $("#search").keyup(function () {
        if (this.value.trim().length==0) {
            return;
        }
        let keywork = this.value.trim();
            $.ajax({
            url:"http://localhost:8080/search",
            data:`keyword=${keywork}`,
            type:"get",
            success:function (resp) {
                $("#show").show();
                $("#show").empty();
                $("#show").css("height",resp.length*25+15);
                for (let ele of resp) {
                    $("#show").append(`<div style='cursor: pointer; text-align: left;height: 25px; padding-left: 6px'
                        οnmοuseοver='gaoliang(this)' οnmοuseοut='huifu(this)' οnclick='settext(this)'>${ele}</div>`);
                }
            },
            error:function (error) {
                $("#show").hide();
            }
        })
    })
    function gaoliang(obj) {
        $(obj).css(`background-color`,`lightgray`)
    }
    function huifu(obj) {
        $(obj).css(`background-color`,`white`)
    }
    function settext(obj) {
        $("#search").val($(obj).text());
        $("#show").hide();
    }
</script>
</body>
</html>

三.JSON

json概述

JavaScript 对象表示形式( JavaScript Object Notation
* java对象表示形式
		User user = new User();
			user.setUsername("羿");
			user.setAge(23);
			user.setSex("男");
			...
			
		Product product = new Product();
			product.setName("小米10");
			product.setDesc("1亿像素的手机小王子");
			
* javaScript对象表示形式
		let user ={"username":"后羿","age":23,"sex":"男"}
		let product = {"name":"小米10","desc":"1亿像素的手机小王子"}

可以取代XML笨重的数据结构,和xml相比:更小、更快,更易解析

json、xml作用:作为数据的载体,在网络中传输

json语法:

* 对象类型
		{name:value,name:value}
		
* 数组类型
		[
            {name:value,name:value},
            {name:value,name:value},
            {name:value,name:value}
		]
		
* 复杂对象
		{
            name:value,
            list:[{name:value},{},{}]
            user:{name:value}
		}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>JSON基础语法</title>

</head>
<body>

</body>
<script>
    // 1.描述用户对象(张丰、男、3岁)
    let user = {"username":"张丰","sex":"男","age":3};
    // alert(user)
    // alert(user.username +"    " +user.age);

    // 2.描述用户数组(张三、张山、张忌)
    let array = [
        {"username":"张三","sex":"男","age":13},
        {"username":"张山","sex":"男","age":2},
        {"username":"张忌","sex":"男","age":2}
    ];
   /* for (let obj of array) {
        console.log(obj.username +"  "+obj.sex);
    }*/

    // 3.描述宝(27岁,老婆、师傅)
    let weiXiaoBao = {
        "age":18,
        "list":[
            {"name":"儿","address":"扬州"},
            {"name":"后","address":"岛国"}
        ],
        "shifu":{"name":"浩南"}
    };
    console.log(weiXiaoBao);
    console.log(weiXiaoBao.age); // 年龄
    let laopos = weiXiaoBao.list; // list集合
    for (let laopo of laopos) {
        console.log(laopo.name +"  "+laopo.address);
    }
    let shifu = weiXiaoBao.shifu; // 
    console.log(shifu.name);

</script>
</html>

json格式转换

 JSON对象与字符串转换的相关函数
	语法:
    	1. JSON.stringify(object) 把json对象转为字符串
    
    	2. JSON.parse(string) 把字符串转为json对象
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>JSON格式转换</title>

</head>
<body>
<script>

    let userStr = '{"username":"张丰","sex":"男","age":13}';
    // alert(userStr);
    // alert(userStr.username)  报错
    //2. JSON.parse(string) 把字符串转为json对象
    let user = JSON.parse(userStr);
    // alert(user.username)
    //1. JSON.stringify(object) 把json对象转为字符串
    let str = JSON.stringify(user);
    alert(str);

</script>
</body>
</html>

AJAX

jQuery-Ajax

json验证

json讲解

发布了141 篇原创文章 · 获赞 27 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/u010581811/article/details/105450887