Ajax知识整理

一、Aajax基础

1、概念

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建 交互式、快速动态应用的网页开发技术,无需重新加载整个网页的情况下,能够更新页面局部数据的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使页面实现异步更新。这意味着可 以在不重新加载整个页面的情况下,对页面的某部分进行更新。

2、使用

2.1、XMLHttpRequest 对象

XMLHttpRequest 是浏览器接口对象,该对象的 API 可被 JavaScript、VBScript 以及其它 web 浏览器内嵌的脚本语言调用,通过 HTTP 协议在浏览器和 web 服务器之间收发 XML 或 其它数据。
XMLHttpRequest 可以与服务器实现异步交互,而无需让整个页面刷新,因此成 为 Ajax

2.2、使用步骤
<script>
      function submit(){
      	//1.创建 XMLHttpRequest 对象
         var xhr = new XMLHttpRequest();
         //2.指定请求方式以及请求地址
         xhr.open("get","ajax.do");
         //3.发送请求
         xhr.send();
         //4.获取服务器端给客户端的响应数据
         xhr.onreadystatechange = function(){
			//0:open()没有被调用 
			//1:open()正在被调用 
			//2:send()正在被调用 
			//3:服务端正在返回结果 
			//4:请求结束,并且服务端已经结束发送数据到客户端
           if(xhr.readyState == 4 && xhr.status == 200){
               alert(xhr.responseText);
               document.getElementById("span").innerHTML=xhr.responseText;
           }
         }
      }
    </script>

二、JSON介绍

1、简介

JSON(JavaScript Object Notation) 是一种基于字符串的轻量级的数据交换格式。易于人阅 读和编写,同时也易于机器解析和生成。JSON 是 JavaScript 数据类型的子集。
在 JSON 未出现之前在 Ajax 中对于数据传递方式,会使用 XML 作为主要数据格式来传 输数据。直到 JSON 出现后逐渐放弃使用 XML 作为数据传输格式。JSON 比 XML 更小、更快,更易解析。

2、特征

2.1、语法规则

示例:[{“属性”:“value”…},{“属性”:“value”…}]
大括号:表示 JSON 的字符串对象;
冒号:分割属性和值;
逗号:分割属性和属性;
中括号:表示数组

2.2、6种数据类型

string:字符串,必须要用双引号引起来;
number:数值,与 JavaScript 的 number 一致;
object:JavaScript 的对象形式,{ key:value }表示方式,可嵌套;
array:数组,JavaScript 的 Array 表示方式[ value ],可嵌套;
true/false:布尔类型,JavaScript 的 boolean 类型;
null:空值,JavaScript 的 null;

3、常见json解析器

在 JDK 中并没有内置操作 JSON 格式数据的 API,因此使用处理 JSON 格式的数据需要借 助第三方类库;
Gson:谷歌开发的 JSON 库,功能十分全面;
FastJson:阿里巴巴开发的 JSON 库,性能十分优秀;
Jackson:社区十分活跃且更新速度很快,SpringMVC 中默认使用 Jackson API 处理 JSON 格式的数据;

4、Jackson使用介绍

4.1、在响应中通过 JSON 格式传递数据
4.1.1、整体步骤

1、添加依赖 jackson-annotations.jar、jackson-core.jar、jackson-databind.jar;
2、通过 jackson API 将 Java 对象转换 JSON 格式;
3、修改响应头,响应类型为 application/json;
4、将结果基于字符输出流推回客户端浏览器;
5、在页面的中通过 JavaScript 的 JSON.parse()函数将 JSON 格式的数据转换为 JavaScript对象;

4.1.2、示例
/**
 * 通过JSON格式响应单个对象
 */
@WebServlet("/single.do")
public class SingleObjectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //创建Users对象
        Users users = new Users();
        users.setUserid(1);
        users.setUsername("zhangsan");

        //使用jackson的API将Users对象转换为JSON格式的字符串对象
        ObjectMapper objectMapper = new ObjectMapper();
        //将Users对象转换为JSON格式的字符串对象
        String string = objectMapper.writeValueAsString(users);
        System.out.println(string);
        //设置响应类型为application/json
        resp.setContentType("application/json");
        PrintWriter pw = resp.getWriter();
        pw.print(string);
        pw.flush();
        pw.close();
    }
}
<script>
        function but(){
            var xhr = new XMLHttpRequest();
            xhr.open("get","single.do");
            xhr.send();
            xhr.onreadystatechange = function(){

                if(xhr.readyState == 4 && xhr.status == 200){
                    alert(xhr.responseText);
                    //通过javaScript的内置对象JSON中的parse函数将JSON格式的字符串对转换成javascript对象
                    var obj = JSON.parse(xhr.responseText);
                    alert(obj.userid+" "+obj.username);
                    document.getElementById("span").innerHTML=obj.userid+"<br/>"+obj.username;
                }
            }
        }
    </script>
4.2、在请求中通过 JSON 格式传递数据
4.1.1、整体步骤

1、在页面的 JavaScript 中通过 JSON.stringify()函数将 JavaScript 对象转换为 JSON 格式的数据;
2、将请求方式修改为 POST 方式;
3、通过 send()函数将 JSON 格式的数据提交到服务端;
4、在 Servlet 中通过字符输入流读取请求体中 JSON 格式的数据;
5、通过 jackson API 将获取到的 JSON 格式的数据转换为 Java 对象;

4.1.2、示例
<script>
        function but(){
           var id= document.getElementById("userid").value;
           var name = document.getElementById("username").value;
           var obj = {userid:id,username:name};
           var content = JSON.stringify(obj);
           alert(content);
            var xhr = new XMLHttpRequest();
            xhr.open("post","json.do");
            xhr.send(content);
            xhr.onreadystatechange = function(){

                if(xhr.readyState == 4 && xhr.status == 200){
                    alert(xhr.responseText);
                    document.getElementById("span").innerHTML=xhr.responseText;
                }
            }
        }
    </script>
/**
 * 在请求中通过JSON格式传递数据
 */
@WebServlet("/json.do")
public class RequestJSONServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过字符输入流从请求体中获取提交的JSON格式的数据
        req.setCharacterEncoding("utf-8");
        String s = req.getReader().readLine();
        //使用Jackson将JSON格式的字符串对象转换成java对象
        ObjectMapper objectMapper = new ObjectMapper();
        Users users = objectMapper.readValue(s, Users.class);
        System.out.println(users.getUserid()+" "+users.getUsername());
        resp.setContentType("application/json");
        PrintWriter pw = resp.getWriter();
        pw.print("OK");
        pw.flush();
        pw.close();
    }
}
4.3、工具类
package com.test.util;

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * JSON转换工具类
 */
public class JsonUtils {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串。
     * <p>Title: pojoToJson</p>
     * <p>Description: </p>
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
    	try {
			String string = MAPPER.writeValueAsString(data);
			return string;
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
    	return null;
    }
    
    /**
     * 将json结果集转化为对象
     * 
     * @param jsonData json数据
     * @param clazz 对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 将json数据转换成pojo对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
    	JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    	try {
    		List<T> list = MAPPER.readValue(jsonData, javaType);
    		return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
    	
    	return null;
    }
    
}
4.4、常见注解

@JsonProperty:用于属性上,作用是把该属性的名称序列化为另外一个名称,如把 username 属 性序列化为 name,@JsonProperty(“name”);
@JsonIgnore:用于属性或者方法上(一般都是定义在属性上),用来完全忽略被注解的字段和 方法对应的属性,返回的 json 数据即不包含该属性;
@JsonFormat:用于属性或者方法上(一般都是定义在属性上),可以方便的把 Date 类型属性的值直接转化为我们想要的样式。如:@JsonFormat(pattern=“yyyy-MM-dd hh:mm:ss”);

5、Jquery中Ajax

在 JQuery 中提供了很多的基于 Ajax 发送异步请求的方法,如: . a j a x ( ) 、 .ajax()、 .ajax().get()、 . p o s t ( ) 、 .post()、 .post().getJSON(),使用起来更加方便;

5.1、$.ajax()
5.1.1、示例
 <script>
        function submit(){
            var userid = $("#userid").val();
            var username = $("#username").val();
            $.ajax({
                type:"post",
                url:"jsonConvert.do",
                dataType:"json",
                //data:"id="+userid+"&name="+username,
                data:JSON.stringify({
                    id:userid,
                    name:username
                }),
                success:function(result){
                    alert(result.id+" "+result.name);
                    $("#span").html(result.id+" "+result.name);
                }
            });
        }
    </script>
5.1.2、提交数据格式说明

标准格式:data:”name=value&name=value…,在 Servlet 中通过 request.getParameter 来获取提交的数据;
js对象格式:data:{userid:100, username:”zhangsan” },在 Servlet 中通过 request.getParameter 来获取提交的数据;
json格式:data:JSON.stringify({name:value,name:value…}),在 Servlet 中通过 req.getReader().readLine()来获取提交的数据;

5.1.2、响应 JSON 格式数据处理

JSON.parse():使用其做格式的转换处理。
dataType:"json":指定响应格式为json类型,如果响应数据为JSON 格式,则直接转换为JavaScript 对象;

5.2、$.get()
5.2.1、语法结构

$.get(url,function(result)
$.get(url,data,function(result))

5.2.2、示例

标准格式提交数据:$.get(url,”name=value&name=value”,function(result))
JS对象提交数据:$.get(url,{userid:1,username:”oldlu”,......},function(result))

5.3、$.post()
5.3.1、语法结构

$.post(url,function(result))
$.post(url,data,function(result))

5.3.2、示例

标准格式提交数据:$.post(url,”name=value&name=value”,function(result))
JS对象提交数据:$.post(url,{userid:1,username:”oldlu”,......},function(result))

5.4、$.getJSON()

要求返回的数据格式必须是 JSON 格式

5.4.1、语法结构

$.getJSON(url,function(result))
$.getJSON(url,data,function(result))

5.4.2、示例

标准格式提交数据:$.getJSON(url,”name=value&name=value”,function(result))
JS对象提交数据:$.getJSON(url,{userid:1,username:”oldlu”,......},function(result))

5.5、serialize()

将 form 表单中的数据自动拼接成 name=value&name=value 结构

5.5.1、语法结构

var param = $(“form”).serialize();
param 的值格式为:name=value&name=value

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值