Servlet--4.Ajax与jQuery、JSON

本文是一篇关于Ajax和JSON的教程。介绍了Ajax异步刷新技术的概念、工作流程,XMLHttpRequest对象的常用方法、事件及服务器响应,还提及传统方式实现Ajax的不足及jQuery对其的封装。同时讲解了JSON的概念、与XML的异同,以及JSON的语法规则、对象和数组的定义与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

ajax教程:https://www.runoob.com/ajax/ajax-tutorial.html

一、ajax(异步刷新技术)概念

  • AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
  • AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
  • AJAX 是一种用于创建快速动态网页的技术。(通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。)
  • AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
  • AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

1.为什么使用Ajax

无刷新:不刷新整个页面,只刷新局部

无刷新的好处

  • 只更新部分页面,有效利用带宽
  • 提供连续的用户体验
  • 提供类似C/S的交互效果,操作更方便

2.传统Web与Ajax的差异

差异

方式

说      明

发送请求方式不同

传统Web

浏览器发送同步请求

Ajax技术

异步引擎对象发送请求

服务器响应不同

传统Web

响应内容是一个完整页面

Ajax技术

响应内容只是需要的数据

客户端处理方式不同

传统Web

需等待服务器响应完成并重新加载整个页面后用户才能进行操作

Ajax技术

可以动态更新页面中的部分内容

不影响用户在页面进行其他操作

3.Ajax工作流程


二、XMLHttpRequest对象

  • XMLHttpRequest 用于在后台与服务器交换数据
  • 整个Ajax技术的核心
  • 提供异步发送请求的能力

(一)常用方法

方     法

说      明

open( String method,  String url,  boolean async,  String user, String password )

创建一个新的HTTP请求

send( String  data )

发送请求到服务器端

abort( )

取消当前请求

setRequestHeader( String header,  String value ) 

设置请求的某个HTTP头信息

getResponseHeader(String header)

获取响应的指定HTTP头信息

getAllResponseHeader( )

获取响应的所有HTTP头信息

1.open()方法    

  • 参数method:设置HTTP请求方法;参数url:请求的URL地址,文件在服务器上的位置;async:true(异步)或 false(同步) 
  • 其中:method参数值大小写不敏感,常用值有get、post等;

2. send()方法    

  • data为发送此请求时携带的参数。data参数值取决于open方法中的method参数,如果method值为“POST”,需要指定该参数。如果method值为“GET”,该参数为null

3. setRequestHeader()方法    

  • 参数header:要指定的HTTP头名称;参数value:对应的值。

XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:

Async=true

当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();

Async = false

如需使用 async=false,请将 open() 方法中的第三个参数改为 false:

xmlhttp.open("GET","test1.txt",false);

GET 还是 POST?

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

(二)事件

onreadystatechange:指定回调函数

1)常用属性

  • readyState:XMLHttpRequest的状态信息

就绪状态码

说      明

0

XMLHttpRequest对象未完成初始化

1

XMLHttpRequest对象开始发送请求// 服务器连接已建立

2

XMLHttpRequest对象的请求发送完成//请求已接收

XMLHttpRequest对象开始读取响应//请求处理中

4

XMLHttpRequest对象读取响应结束//请求已完成,且响应已就绪

  • status:HTTP的状态码

状态码

说      明

200

服务器正确返回响应

就绪状态是4且状态码 是200,表示正确完成

404

请求的资源不存在

500

服务器内部错误

403 

没有访问权限

……

  • statusText:返回当前请求的响应状态
function myFunction(){
    loadXMLDoc("/try/ajax/ajax_info.txt",function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    });
}

(三)服务器响应

  • responseText:以文本形式获得响应的内容 ·(获得字符串形式的响应数据。)
  • responseXML:将XML格式的响应内容解析成  DOM对象返回 (获得 XML 形式的响应数据。)
/*
    responseText 属性
    如果来自服务器的响应并非 XML,请使用 responseText 属性。
*/
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

/*
   responseXML 属性
    如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:
*/ 
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

 

(四) GET请求和POST请求的区别

步  骤

请求方式

实  现  代  码

初始化组件

GET

xmlHttpRequest.open( "GET", url, true );

POST

xmlHttpRequest.open( "POST", url, true );

xmlHttpRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );

发送请求

GET

xmlHttpRequest.send( null );

POST

xmlHttpRequest.send( "key=xxx&type=12&year=2016" );

 


三、使用jQuery实现Ajax

传统方式实现Ajax的不足

  • 步骤繁琐
  • 方法、属性、常用值较多不好记忆
  • 处理复杂结构的响应数据(如XML格式)
  • 比较烦琐 浏览器兼容问题
  • jQuery将Ajax相关操作都进行了封装

(一)$.ajax()简介

1.语法

$.ajax([settings]);

2.常用属性参数

参  数

类  型

说      明

url

String

发送请求的地址,默认为当前页地址

type

String

请求方式,默认为GET

data

PlainObject

或 String

或 Array

发送到服务器的数据

dataType

String

预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text

timeout

Number

设置请求超时时间

global

Boolean

表示是否触发全局Ajax事件,默认为true

3.常用函数参数

参  数

类      型

说      明

beforeSend

Function ( jqXHR  jqxhr,  PlainObject  settings )

发送请求前调用的函数

success

Function( 任意类型  result, String  textStatus,jqXHR  jqxhr )

请求成功后调用的函数

参数result:可选,由服务器返回的数据

error

Function ( jqXHR  jqxhr, String  textStatus, String  errorThrown )

请求失败时调用的函数

complete

Function ( jqXHR  jqxhr,String textStatus )

请求完成后(无论成功还是失败)调用的函数

(二)使用$.ajax()发送异步请求

$.ajax( {
     "url":"url",         // 要提交的URL路径
     "type":"get",        // 发送请求的方式
     "data":data,         // 要发送到服务器的数据
     "dataType":"text",   // 指定传输的数据格式
     "success":function(result) { 
        // 请求成功后要执行的代码
	 },
      "error":function() {           
        // 请求失败后要执行的代码
	 }
} );

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
	$("button").click(function(){
		$.ajax({url:"demo_ajax_load.txt",async:true,success:function(result){
			$("div").html(result);
		}});
	});
});
</script>
</head>
<body>

<div><h2> AJAX 可以修改文本内容</h2></div>
<button>修改内容</button>

</body>
</html>

 

  • 其中:传参时使用的语法是一种新数据类型——JSON

三、JSON

菜鸟教程:https://www.runoob.com/json/json-tutorial.html

(一)json概念

JSON(JavaScript  Object  Notation) (JavaScript 对象表示法)

  • 一种轻量级的文本数据交换格式
  • 采用独立于语言的文本格式
  • 通常用于在客户端和服务器之间传递数据

JSON的优点

  • 轻量级交互语言
  • 结构简单
  • 易于解析
  • JSON 具有自我描述性,更易理解

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

为什么使用 JSON?

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

使用 JSON

  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

(二)定义JOSN

1.JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)    ---{ "age":30 }
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

2.定义JSON对象

语法

var JSON对象 = { "name" : value,  "url" : value,  …… };

示例

var person = { "name" : "张三",   "age" : 30,  "spouse" : null };

JSON 对象使用在大括号({})中书写。

对象可以包含多个 key/value(键/值)对。

key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

key 和 value 中使用冒号(:)分割。

每个 key/value 对使用逗号(,)分割。

访问对象值

你可以使用点号(.)来访问对象的值:

var myObj, x;

myObj = { "name":"runoob", "alexa":10000, "site":null };

x = myObj.name;

 

你也可以使用中括号([])来访问对象的值:

var myObj, x;

myObj = { "name":"runoob", "alexa":10000, "site":null };

x = myObj["name"];

循环对象

你可以使用 for-in 来循环对象的属性:

var myObj = { "name":"runoob", "alexa":10000, "site":null };

for (x in myObj) {

          document.getElementById("demo").innerHTML += x + "<br>"; }

 

在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:

var myObj = { "name":"runoob", "alexa":10000, "site":null };

for (x in myObj) {

       document.getElementById("demo").innerHTML += myObj[x] + "<br>"; }

 

3.定义JSON数组

语法

var JSON数组 = [ value,  value,  …… ];

示例

var countryArray = [ "中国",  "美国",  "俄罗斯" ];

var personArray = [ { "name":"张三",  "age":30 },{ "name":"李四",  "age":40 } ];


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值