JSON、AJAX

什么是 JSON?

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON
采用完全独立于语言的文本格式,而且很多语言都提供了对 json 的支持(包括 C, C++, C#, Java, JavaScript, Perl, Python
等)。 这样就使得 JSON 成为理想的数据交换格式。
json 是一种轻量级的数据交换格式。
轻量级指的是跟 xml 做比较。
数据交换指的是客户端和服务器之间业务数据的传递格式。 

JSON 在 JavaScript 中的使用

json 的定义

json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔,
多组键值对之间进行逗号进行分隔

json 定义示例:

        var jsonObj = {
            "key1":12,
            "key2":"abc",
            "key3":true,
            "key4":[11,"arr",false],
            "key5":{
                "key5_1":551,
                "key5_2":"key5_2_value"
            },
            "key6":[{
                "key6_1":6611,
                "key_6_2":"key6_1_2_value"
            },{
                "key6_2_1":6621,
                "KEY6_2_2":"key6_2_2_value"
            }
            ]
        }

json 的访问

json 本身是一个对象。

json 中的 key 我们可以理解为是对象中的一个属性。

json 中的 key 访问就跟访问对象的属性一样: json 对象.key

json 访问示例:

  <script  >
  
      alert(typeof (jsonObj));//object json 就是一个对象
        alert(jsonObj.key1); //12
        alert(jsonObj.key2); // abc
        alert(jsonObj.key3); // true
        // json 中 数组值的遍历
        for (var i = 0; i < jsonObj.key4.length;i++){
            alert(jsonObj.key4[i])
        }

        // 取出来每一个元素都是 json 对象
        var  jsonItem = jsonObj.key6[0];
        alert(jsonItem.key6_1);


</script>

 

json 的两个常用方法

json 的存在有两种形式。
一种是:对象的形式存在,我们叫它 json 对象。
一种是:字符串的形式存在,我们叫它 json 字符串。
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串

JSON.stringify() 把 json 对象转换成为 json 字符串

JSON.parse() 把 json 字符串转换成为 json 对象

JSON.stringify() 把 json 对象转换成为 json 字符串

JSON.parse() 把 json 字符串转换成为 json 对象

        // 把json对象转化为json字符串
        var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java 中对象的 toString
        alert(jsonObjString);

        // 把 json 字符串。转换成为 json 对象
        var jsobObj2 = JSON.parse(jsonObjString);
        alert(jsobObj2.key1);
        alert(jsobObj2.key2);

 JSON 在 java 中的使用

要先导入第三方jar包 gson-2.2.4.jar 然后再使用

 javaBean 和 json 的互转

        Person person = new Person();
        // 创建 Gson 对象实例
        Gson gson = new Gson();
        // toJson 方法可以把 java 对象转换成为 json 字符串
        String personStr = gson.toJson(person);
        System.out.println(personStr);

        // fromJson 把 json 字符串转换回 Java 对象
        // 第一个参数是 json 字符串
        // 第二个参数是转换回去的 Java 对象类型
        Person person1 = gson.fromJson(personStr, Person.class);
        System.out.println(person1);    

List和Json的互转

我们如果在转化的时候要建立转化 类型的泛型类去继承TypeToken

public class PersonList extends TypeToken<ArrayList<Person>> {
}
    @Test
    public void test2(){
        List<Person> personList = new ArrayList<Person>();

        personList.add(new Person());
        personList.add(new Person());

        Gson gson = new Gson();
        // 把 List 转换为 json 字符串
        String personListJsonString = gson.toJson(personList);
        System.out.println(personListJsonString);

        List<Person> list = gson.fromJson(personListJsonString, new PersonList().getType());
        System.out.println(list);
        Person p = list.get(0);
        System.out.println(p);

    }

map 和 json 的互转

    @Test
    public void Test3(){
        Map<Integer,Person> personMap = new HashMap<>();
        personMap.put(1,new Person());
        personMap.put(2,new Person());
        Gson gson = new Gson();
      // 把 map 集合转换成为 json 字符串 String personMapJsonString
= gson.toJson(personMap); System.out.println(personMapJsonString); Map<Integer,Person> personMap1 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer, Person>>() { }.getType()); System.out.println(personMap1); Person person = personMap1.get(1); System.out.println(person); }

AJAX 请求

什么是 AJAX 请求?

AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发
技术。
ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。
Ajax 请求的局部更新,浏览器地址栏不会发生变化
局部更新不会舍弃原来页面的内容

javascript中的Ajax使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

    <script type="text/javascript">
        // 在这里使用 javaScript 语言发起 Ajax 请求,访问服务器 AjaxServlet 中 javaScriptAjax
        function ajaxRequest() {

            // 1、我们首先要创建 XMLHttpReque
            var xmlhttprequest = new XMLHttpRequest();

            // 2、调用 open 方法设置请
            xmlhttprequest.open("GET","http://localhost:8080?action=javascriptAjax",true);
            //4、在 send 方法前绑定 onreadystatechange 事件,处理请求完成后的操作
            xmlhttprequest.onreadystatechange = function () {
                if(xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200){

                    var jsonObj = JSON.parse(xmlhttprequest.responseText);
                    // 把响应的数据显示在页面上
                    document.getElementById("div01").innerHTML = "编号:" + jsonObj.id + " , 姓名:" +
                        jsonObj.name;
                }
            }
            // 3、调用 send 方法发送请求
            xmlhttprequest.send();

        }

    </script>
</head>
<body>

<button onclick="ajaxRequest()">ajax request</button>
<div id="div01">
</div>


</body>
</html>

Jquery中的Ajax的使用

$.ajax 方法
        url 表示请求的地址
        type 表示请求的类型 GET 或 POST 请求
        data 表示发送给服务器的数据
    格式有两种:
        一:name=value&name=value
    二:{key:value}
        success 请求成功,响应的回调函数
        dataType 响应的数据类型
    常用的数据类型有:
        text 表示纯文本
        xml 表示 xml 数据
        json 表示 json 对象    
        $("#ajaxBtn").click(function () {
            $.ajax({
                url:"http://localhost:8080/ajaxServlet?action=javascriptAjax",
                data:{action:"jqueryAjax"},
                type:"GET",
                success:function (data) {  // 
                    var data = JSON.parse(data);
                    $("#msg").html("编号:" + data.id + " , 姓名:" + data.name);
                },
                dataType:"json"

            })
        })

jquery中的json中的success是请求成功的执行方法,其中的data是执行成功返回的值

Jquery的$.get 方法和$.post 方法

url 请求的 url 地址
data 发送的数据
callback 成功的回调函数
type 返回的数据类型

$.get

    // ajax--get请求
                $("#getBtn").click(function(){

                    $.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGet",function (data) {
                        $("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name);
                    },"json");
                    
                });

$.post

                // ajax--post请求
                $("#postBtn").click(function(){
                    // post请求
                    $.post("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryPost",function (data) {
                        $("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name);
                    },"json");
                    
                });

后端定义的方法来接收get或者post

 protected void jQueryGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("  jQueryGet  == 方法调用了");
        Person person = new Person(1, "国哥");
        // json格式的字符串
        Gson gson = new Gson();
        String personJsonString = gson.toJson(person);

        resp.getWriter().write(personJsonString);
    }

    protected void jQueryPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("  jQueryPost   == 方法调用了");
        Person person = new Person(1, "国哥");
        // json格式的字符串
        Gson gson = new Gson();
        String personJsonString = gson.toJson(person);

        resp.getWriter().write(personJsonString);
    }

$.getJSON 方法

url 请求的 url 地址
data 发送给服务器的数据
callback 成功的回调函数
// ajax--getJson请求
                $("#getJSONBtn").click(function(){
                    $.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGetJSON",function (data) {
                        $("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name);
                    });
                });
// ajax请求
                $("#submit").click(function(){
                    // 把参数序列化
                    $.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQuerySerialize&" + $("#form01").serialize(),function (data) {
                        $("#msg").html(" Serialize 编号:" + data.id + " , 姓名:" + data.name);
                    });
                });

如果我们想要将注册用户的时候使用ajax和json一起来使用验证

使用 AJAX 验证用户名是否可用

UserServlet 程序中 ajaxExistsUsername 方法:

    protected void ajaxExistsUsername(HttpServletRequest req,HttpServletResponse resp) throws IOException {
        // 获取请求的参数 username
        String username = req.getParameter("username");
        // 调用 userService.existsUsername();来验证用户是否存在
        boolean existsUsername = userService.existsUsername(username);
        // 把获取的结果封装成map
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("existsUsername",existsUsername);
        Gson gson = new Gson();
        String toJson = gson.toJson(map);
        resp.getWriter().write(toJson);
    }

regist.jsp中的页面代码

$("#username").blur(function () {
                    //1:获取用户名
                    var username = this.value;
                    $.getJSON("http://localhost:8080/userServlet","action=ajaxExistsUsername&username="+username,function (data) {
                        if(data.existsUsername){
                            $("span.errorMsg").text("用户名已经存在");
                        }else {
                            $("span.errorMsg").text("用户可用");
                        }

                    })

.

原文地址:https://www.cnblogs.com/zhaoyunlong/p/13920124.html