Ajax
概念
什么是Ajax?
Asynchronous JavaScript and XML
, 异步的JS
和XML
.异步的客户端和服务器交互技术
Ajax
是js
提供的,代码是js
代码,需要写在Script
标签体里
Ajax
在客户端和服务器进行交互的时候,数据默认是使用XML
格式传输的--已经被json
取代了-
作用
- 局部刷新
- 异步加载
异步与同步的概念
同步: 客户端发起请求,然后客户端处于服务器的等待状态,这个状态下,客户端不能进行其他操作.类似于"假死"状态.
异步: 客户端发起请求, 然后客户端可以自由进行其他操作,不会处于“假死”状态;一旦服务器响应完成,可以继续后续操作
JS 的 Ajax
步骤
- 创建一个Ajax引擎对象
- 给Ajax引擎对象绑定事件,监听Ajax引擎的状态变化.一旦监听到接受服务器响应完成,要执行响应行为
- 设置请求的参数数据
- 发送请求
js 的 get方法-异步
function ajaxGet() {
//创建一个Ajax引擎对象
var xmlHttp = new XMLHttpRequest();
//2.给Ajav引擎对象绑定事件,监听Ajax的引擎状态变化,一旦监听到接收服务器响应完成,要执行响应行为
xmlHttp.onreadystatechange = function (ev) {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById("tip").innerText = xmlHttp.responseText;
}
}
}
//3.这是请求的参数数据,open()方法:请求方式,请求地址,是否异步(默认true,异步)
//get方法传参
xmlHttp.open("get", "/ajax/ajaxServlet?username=tom", true);
//4. 发送请求
xmlHttp.send();
js的post方法-异步
function ajaxPost() {
//1. 创建一个Ajax引擎对象
var xmlhttp = new XMLHttpRequest();
// 2. 给Ajax引擎对象绑定事件,监听Ajax引擎的状态变化.一旦监听到接受服务器响应完成,要执行响应行为
xmlhttp.onreadystatechange = function (ev) {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
document.getElementById("tip").innerHTML = xmlhttp.responseText;
}
}
}
// 3. 设置请求的参数数据:请求方式,请求地址,是否异步(//不写true,默认是异步的)
xmlhttp.open("post", "ajaxServlet", true);
// 4. 发送请求
xmlhttp.setRequestHeader("Content-type","application/x-www/form-urlencode")
xmlhttp.send("username=tom");
}
js的post和get方法-同步模式
只需要将 xmlhttp.open(method,url,async)中的aync参数该为false
即可
请求参数的格式
- 格式一:"username=tom&password=123"
- 格式二:{username:"tom",password:"123"}
关于路径
- 在
HTML
里写路径的时候,建议使用相对路径.好处是不需要关注context path
. - 在
jsp
或者Servlet
里面,写绝对路径./资源路径
或者/contextpath/资源路径
- 当前页面的资源路径:
/jsajax.html
请求的目标资源路径:/ajaxServlet
在当前页面里请求/ajaxServlet
,路径就可以写成:./ajaxServlet
,简写成:ajaxServlet
jQuery 的 Ajax
原生的 JavaScript 提供的 Ajax,重复代码比较多,而且存在浏览器兼容问题。jQuery 对 js 的 Ajax 做了二次封 装,封装后提供了一些方法。这些方法一样可以实现 Ajax 的效果,但是比原生 js 的 Ajax 更为简单,并且解决了浏览器兼 容性问题.
Post方法 (最常用)
语法: jQuery.post(url,[params],[callback],[responseType])
参数: url 请求的地址,必须
params 请求的参数
格式1: username=tom&password=123
格式2: {username:"tom",password:"123"}
callback 当Jquery监听到服务端响应完成之后,调用的函数对象
function(result){
//result:服务器响应回来的数据
}
responseType 服务端响应回来的数据类型。text/json
//var params = "username=tom";
var params = {username:"tom"};
$.post("ajaxServlet", params, function (result) {
alert(result);
})
Get方法
语法: jQuery.get(url,[params],[callback],[responseType])
参数: url 请求的地址,必须
params 请求的参数
格式1: username=tom&password=123
格式2: {username:"tom",password:"123"}
callback 当Jquery监听到服务端响应完成之后,调用的函数对象
function(result){
//result:服务器响应回来的数据
}
responseType 服务端响应回来的数据类型。text/json
var params = {username:"tom"}
$.get("/ajax/ajaxServlet",params,function (result) {
alert(result);
})
注意: get/post
方法,只能发异步的. 如果要发送同步的请求,需要使用ajax
方法
Ajax方法
语法:$.ajax({settings});
参数:是以{}的对象形式,里边是键值对的方式配置相关的数据。有非常多的配置项,常用的有:
url:请求的地址。必须
data:请求参数。格式一:"username=tom&password=123"。 格式:{username:"tom",password:"123"}
type:请求方式。get/post
dataType:服务端响应回来的数据类型。text/json
success:jQuery 监听到服务端响应完成后,调用的函数对象。
function(result){
//result:服务端响应回来的数据
}
async:是否异步。true/false
$.ajax({
url: "/ajax/ajaxServlet", // 请求地址,必填
data: "username=tom", //请求参数
type: "post", //请求方式
dataType: "text", //服务器返回的参数类型
success: function (result) { //监听到服务器响应完成后,调用函数对象
alert(result);
},
async: true //是否异步,默认true
});
jQuery3.0 的Ajax新增签名方式
待补充...下回分解....
JSON
概念
JavaS Object Notation JS对象标记法. 是一种轻量级数据格式,代替xml
定义和解析JSON
- 定义:
- 对象形式定义:
var json = {"key":value, "key":value}
- 数组形式定义:
var arr = [obj1, obj2];
- 两种混合定义:
var arr = {"key":obj, "key":{}, "key":[]}
- 对象形式定义:
- 解析:
var v = json.key; var v = json[i].key
- Demo
var json = {key:value,key:value}
/*class Person{ String name = "三丰"; Integer age = 100; }*/ var p = {"name":"三丰","age":100}; var name = p.name; var age = p.age;
-
var arr = [object1,object2]
//[{key:value,key:value},{key:value,key:value}] var json = [ {"name":"张三","age":17}, {"name":"李四","age":18} ]; var name1 = json[0].name; var name2 = json[1].name; var age1 = json[0].age; var age2 = json[1].age;
-
var arr = {"key":"obj","key":{},"key":[]}
//1. {"param":[{key:value,key:value},{key:value,key:value}] var json = { "department" :[ {"name":"coco","age":17}, {"name":"joy","age":18}, {"name":"ceci","age":19} ] }; var name = json.department[2].name; /** * 2. * { * "param1":[{key:value,key:value},{key:value,key:value}], * "param2":[{key:value,key:value},{key:value,key:value}], * "param3":[{key:value,key:value},{key:value,key:value}] * } */ var json = { "department1": [ {"name": "coco", "age": 17}, {"name": "joy", "age": 18}, {"name": "ceci", "age": 19} ], "department2": [ {"name": "coco", "age": 17}, {"name": "joy", "age": 18}, {"name": "ceci", "age": 19} ] } var age = json.department2[1].age; alert(age); /** * 3 * { * "param1":"value1", * "param2":{}, * "param3":[{key:value,key:value},{key:value,key:value}] * } */ var json = { "school": "University", "info": {"schoolName": "ShenZhen-University", "address": "ShenZhen"}, "student": [ {"name": "coco", "age": 17}, {"name": "joy", "age": 18}, {"name": "ceci", "age": 19} ] } var schoolName = json.info.schoolName; var name = json.student[0].name; alert(schoolName); alert(name);
JSON转换工具
服务端经常要把 JavaBean
或者是 JavaBean
的集合转换成 json
,返回响应给客户端,可以使用工具包来完成 这个转换的工作。
常见的有:
-
jsonlib
:sun 公司的,依赖的 jar 包过多 -
gson
:google 的工具包 -
fastjson
:alibaba 的工具包 -
jackson
:springMvc 默认使用的转换工具包
jsonlib
package json;
import domain.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class JsonLib_01 {
public static void main(String[] args) {
User user1 = new User("coco","123");
User user2 = new User("xingxing","123");
ArrayList<User> userList = new ArrayList();
userList.add(user1);
userList.add(user2);
Map<String,User> map = new HashMap<>();
map.put("user1",user1);
map.put("user2",user2);
//把user1转换为json格式
JSONObject jsonObject = JSONObject.fromObject(user1);
String json = jsonObject.toString();
System.out.println(json);
//把list转换为json格式
JSONArray jsonArray = JSONArray.fromObject(userList);
json = jsonArray.toString();
System.out.println(json);
//把map转换为json格式
JSONObject jsonObject1 = JSONObject.fromObject(map);
json = jsonObject1.toString();
System.out.println(json);
}
}
gson
package json;
import com.google.gson.Gson;
import domain.User;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Gson_02 {
public static void main(String[] args) {
User user1 = new User("coco", "123");
User user2 = new User("xingxing", "123");
ArrayList<User> userList = new ArrayList();
userList.add(user1);
userList.add(user2);
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
//把user转换为Json格式
Gson gson = new Gson();
String json = gson.toJson(user1);
System.out.println(json);
//把userList转换为Json格式
json = gson.toJson(userList);
System.out.println(json);
//把map转换为Json格式
json = gson.toJson(map);
System.out.println(json);
}
}
fastjson
package json;
import com.alibaba.fastjson.JSONObject;
import domain.User;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class FastJson_03 {
public static void main(String[] args) {
User user1 = new User("coco", "123");
User user2 = new User("xingxing", "123");
ArrayList<User> userList = new ArrayList();
userList.add(user1);
userList.add(user2);
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
//把user转换为Json格式
String json = JSONObject.toJSONString(user1);
System.out.println(json);
//把userList转换为Json格式
json = JSONObject.toJSONString(userList);
System.out.println(json);
//把map转换为Json格式
json = JSONObject.toJSONString(map);
System.out.println(json);
}
}
jackson
package json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import domain.User;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Jackson {
public static void main(String[] args) throws JsonProcessingException {
User user1 = new User("coco", "123");
User user2 = new User("xingxing", "123");
ArrayList<User> userList = new ArrayList();
userList.add(user1);
userList.add(user2);
Map<String, User> map = new HashMap<>();
map.put("user1", user1);
map.put("user2", user2);
ObjectMapper mapper = new ObjectMapper();
//把user转换为Json格式
String json = mapper.writeValueAsString(user1);
System.out.println(json);
//把userList转换为Json格式
json = mapper.writeValueAsString(userList);
System.out.println(json);
//把map转换为Json格式
json = mapper.writeValueAsString(userList);
System.out.println(json);
}
}