AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。
AJAX的开发流程
1.创建 XMLHttpRequest 对象
variable=new XMLHttpRequest();
2.向服务器发送请求
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
3.服务器响应
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
4.根据状态的改变会触发onreadystatechange 事件
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
Json的转换工具
概述
JSON是一种轻量化的数据传输格式,在各种场景都有运用。比如在ajax中,服务端的数据一般通过JSON字符串的格式传输给前端,前端ajax引擎自动将JSON字符串转化为JS对象(需要将ajax的返回内容格式设置为"json")。那么此时我们在后台服务器中就需要将封装好的JavaBean对象转化为JSON格式字符串来传输给前台ajax引擎,此时使用JSON转化工具将大大简化我们代码量。
首先我们需要明确的是什么是JSON格式
JSON格式有两种,一种是对象格式,另一种是数组格式(也可以叫集合)。
对象格式:{"key1":value1,"key2":value2......}
数组形式:[{对象1},{对象2}....]
1.GSON转换工具
2.JSONLib转换工具:JSONArray JSONObject
3.Jackson转换工具
注意:
[JSON字符串如何转化成对象?]
解析
1、定义:是指将符合 JSON 语法规则的字符串转换成对象的过程。
2、不同的编程语言都提供了解析 JSON 字符串的方法,在这里主要讲解 JavaScript 中的解析方法。主要有三种:
1)- 使用 eval()
2)- 使用 JSON.parse()
3)- 使用第三方库,例如 JQuery 等
eval()
1、eval() 函数的参数是一个字符串,其作用是直接执行其中的 JavaScript 代码。
2、eval() 能够解析 JSON 字符串。从这里也可以看得出,JSON 和 JavaScript 是高度嵌合的。
3、但是,现在已经很少直接使用 eval() 来解析了,如果您的浏览器版本真的是很旧,可能才需要这个方法。此外,eval() 是一个相对危险的函数,因为字符串中可能含有未知因素。在这里,作为学习,还是要知道这也是一种方法。
4、请注意 eval() 的参数,在字符串两旁加了括号,这是必须的,否则会报错。
5、因为 JSON 字符串是被大括号(“{}”)包围的,直接放到 eval() 会被当成语句块来执行,因此要在两旁加上括号,使其变成表达式。
Jquery Ajax
使用jQuery+json+servlet动态取后台的list集合的数据。
后台Servlet
package com.cxl.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.cxl.model.User;
public class UserServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//禁用缓存,确保网页信息是最新数据
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
PrintWriter out = response.getWriter();
System.out.println(System.currentTimeMillis());
List<User> users = new ArrayList<User>();
User user = new User();
user.setUsername("cxl");
user.setPassword("123");
User u = new User();
u.setUsername("lhl");
u.setPassword("1234");
users.add(user);
users.add(u);
//List转json数组格式
JSONArray jsonArray = JSONArray.fromObject(users);
System.out.println(jsonArray.toString());
/*
打印结果为:[{"password":"123","username":"cxl"}
,{"password":"1234","username":"lhl"}]
*/
out.print(jsonArray.toString());
/*
用json对象格式返回数据
JSONObject jsonObj = new JSONObject();
jsonObj.put("users", users);
System.out.println(jsonObj);
打印结果:{"users":[{"password":"1234","username":"cxl"}
,{"password":"1234","username":"lhl"}]}
out.print(jsonObj);
*/
out.flush();
out.close();
}
}
Js代码
//jQuery(function{})或$(document).ready(function(){})或$(function(){});
jQuery(function() {
setTimeout(getUserInfo,0);//执行getUserInfo函数一次
function getUserInfo() {
$.post("http://localhost:8080/jQueryDemo/servlet/UserServlet",null,
function call(data){
var str = "";
str = "<table><tr><th>用户名</th><th>密码</th></tr>";
//循环遍历json数组格式的数据
$.each(data, function(index, item) {
str += "<tr><td>" + item.username + "</td><td>"
+ item.password + "</td></tr>";
});
/*
循环遍历json对象格式的数据
$.each(data.users, function(index, item) {
str += "<tr><td>" + item.username + "</td><td>“
+ item.password + "</td></tr>";
});
*/
str += "</table>";
//把数据展现在jsp页面上
$("#userInfo").html(str);
},"json");
};
//动态取后台数据
setInterval(getUserInfo, 10000);//每隔10秒钟执行一次getUserInfo函数
});
页面(Jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.7.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/userInfo.js"></script>
</head>
<body>
<center>
<h2>用户信息</h2>
<div id="userInfo"></div>
</center>
</body>
</html>
网友评论