ajax、jQuery与JSON开发

概念:

    在传统的Web应用中,每次请求服务器都会生成新的页面,用户在提交请求后,总是要等待服务器的响应,如果

前一个请求没得到响应,则后一个请求就不能发送。由于这是一种独占式的请来,因此如果服务器响应没有结

束,用户就只能等待或者不断剧新页面。在等待期间,由于新的页面没有生成,整个浏览器将是一片空白,而用

户只能继续等待。对于用户而言,这是一种连续的体验  同时,频繁地剧新页面也会使服务器的负担加重。


     AX技术正是为了弥补以上不足而诞生的。Alax 应用使用JavaScript异步发送请求,不用每次请求都重新加载页

面,发送请求时可以继续其他的操作,在服务器响应完成后,再使用javaScript将响应展示给用户。


    使用Ajax技术从用户发送请求到获得响应,当前用户界面在整个过程中不会受到干扰而且我们可以在必要的时

只更新页面的一小部分,而不用刷新整个页面,即“无刷新”技术

问题:

传统的Web 开发技术和Ajax 技术有什么区别?

解答:

无论使用哪种开发技术,流程都是先由客户端发送HTTP 请求,然后由服务器对请求生成响应。但传统的Web 开

发技术和Ajax 技术之间还是存在很多差异的。

差异1: 发送请求方式不同。

传统Web 应用通过浏览器发送请求,而Ajax 技术则是通过JavaScript 的 XMLHttpRequest 对象。

差异2: 服务器响应不同。

针对传统Web 应用,服务器的响应是一个完整的页面,而采用Ajax 技术后服务器的响应只是需要的数据。

差异3: 客户端处理的响应方式不同。

传统的web应用发送请求后,浏览器将等待服务器响应完成后重新加载整个页面。而采用Aiax技术后,浏览器不

再空用等待请求的响应,而只是通过javaScript动态更新页面中需要更新的部分

Ajax简介

Ajax技术的主要开发语言:

1、javaScript:Ajax技术的主要开发语言

2、XML/JSON/HTML等:用来封装请求或响应的数据格式


DOM(文档对象模型):通过DOM属性或方法修改页面元素,实现页面局部刷新

CSS:改变样式,美化页面效果,提升用户体验度

Ajax引擎:即XMLHTTPRequest对象,以异步方式在客户端与服务器之间传递数据


XMLHTTPRequest

1、创建XMLHTTPRequest对象

语法:

老版本IE(IE5 和 IE6)

XMLHTTPRequest =new ActiveXObect("Microsoft.XMLHTTP");

新版本(推荐使用)

XMLHTTPRequest  = new XMLHTTPRequest ();

2、XMLHTTPRequest对象常用属性和方法

XMLHTTPRequest的常用方法
方法名称 说明
open( String method,  String url, boolean async,  String user, String password ) 

用于创建一个新的HTTP请求

参数:method:设置HTTP请求方式,如 POST、get 等,对大小写不敏感

参数 url:请求的URL地址

参数:async :可选,指定此请求是否为异步方法,默认为true

参数 user:可选,如果服务器需要验证,此处需要指定用户名:否则会弹出验证窗口

参数password:可选,验证信息中的密码,如果用户名为空,此值将被忽略

send( String  data )

发送请求到服务器端

参数data:字符串类型,通过此请求发送的数据。此参数数值取决于open方法中的method参数。method值为post,可以指定参数。get为null

abort( ) 取消当前请求
setRequestHeader( String header,  String value ) 

单独设置请求的某个HTTP头信

参数 header:要指定的HTTP头名称

参数value:要指定的HTTP头名称所对应的值

getResponseHeader(String header)

从响应的所有HTTP头信息

参数header:要获取的指定HTTP头

getAllResponseHeader( ) 获取响应的所有HTTP头信息
   
XMLHttpRequest的常用属性
onreadystatechange 指定回调函数
readyState

返回请求的当前状态:

常用值:

0:XMLHttpRequest对象未完成初始化

1:XMLHttpRequest对象开始发送请求

2:XMLHttpRequest对象的请求发送完成

3:XMLHttpRequest对象开始读取响应

4:XMLHttpRequest对象读取响应结束

status

HTTP的状态码

常用值:

200:服务器正确返回响应

404:请求的资源不存在

500:服务器内部错误

403:没有访问权限

statusText 返回当前请求的响应行状态
responseText 以文本形式获得响应的内容 
responseXML 将XML格式的响应内容解析成  DOM对象返回
   
   

小案例:问题分析

实现无刷新用户名验证
当用户名文本框失去焦点时,发送请求到服务器,判断用户名是否存在

如果已经存在提示 “用户名已被使用”,如果不存在则提示 “用户名可以使用”

不实现提交:只做判断


参考代码:

body:主页面代码

注:使用jQuery需要先引用架包

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../jar/jquery-1.12.4.js"></script>
<script type="text/javascript" src="../js/User_GET.js"></script>
<title>用户注册</title>
</head>
<body>
	<form action="" method="post" name="myform">
		<p>
			注册邮箱:<input type="email" name="userEmail" id="userEmail"> <span
				id="errorEmail"></span>
		</p>
		<p>
			用户名:<input type="text" name="userName" id="userName">
		</p>
		<p>
			密码:<input type="password" name="userPwd" id="userPwd">
		</p>
		<p>
			确认密码:<input type="password" name="renPwd" id="renPwd">
		</p>
		<input type="submit" name="submit" id="submit" value="提交">
	</form>
</body>
</html>

js代码:给用户名框注册鼠标离开事件

$(function(){
	//邮箱文本框失去焦点事件
	$("#userEmail").blur(function(){
		//获取用户输入的邮箱
		var email=$("#userEmail").val();
		if(email==null||email=="")
		{
			$("#errorEmail").text("邮箱不能为空");
		}else{
			//1.创建XMLHttpRequest对象
			var req=xmlHttpRequest();
			//2.设置回调函数
			req.onreadystatechange=callBack;
			/**
			 * 3.初始化XMLHttpRequest组件
			 * 服务器端URL地址,name为用户名文本框获取的值
			 */
			var url="/jsp_day10/userInfo?email="+email;
			req.open("GET",url,true);
			//4.发送请求
			req.send(null);
			//5.回调函数
			function callBack()
			{
				//判断返回请求的状态
				if(req.readyState==4&&req.status==200)
				{
					var date=req.responseText;
					alert(date);
					if(date=="true")
					{
						$("#errorEmail").text("邮箱已注册");
						$("#errorEmail").css("color","red");
					}else if(date=="false"){
						$("#errorEmail").text("邮箱可以使用");
						$("#errorEmail").css("color","#00FF00");
					}
				}
			}
			
		}
	});
	
	function xmlHttpRequest()
	{
		if(window.XMLHttpRequest)
		{
			return new XMLHttpRequest();
		}else{
			return new ActiveXObect("Microsoft.XMLHTTP");
		}
	}
});

Servlet类:

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class userInfo
 */
@WebServlet("/userInfo")
public class userInfo extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public userInfo() {
        
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//指定编码格式
		request.setCharacterEncoding("UTF-8");
		//获取请求的值
		String email=request.getParameter("email");
		//模拟邮箱用户成员
		//Map<String,String> list=new HashMap<String,String>();
		List<String> list=new ArrayList<String>();
		list.add("[email protected]");
		list.add("[email protected]");
		list.add("[email protected]");
		//标识是否存在该邮箱
		boolean flag=false;
		//判断输入的邮箱是否存在
		if(list.contains(email))
		{
			flag=true;//重新赋值		
		}
		response.setContentType("text/html;charset=UTF-8");
		//向页面相应数据
		PrintWriter out=response.getWriter();
		out.print(flag);
		//刷新缓冲区
		out.flush();
		//关闭out
		out.close();
	}
}

以上是get 请求模式:

修改代码为  post:只修改改动js代码,第三步和第四部



GET请求和POST请求的区别



使用jQuery实现Ajax

1、传统方式实现Ajax的不足步骤繁琐,方法、属性、常用值较多不好记忆,处理复杂结构的响应数据

(如XML格式)比较烦琐,浏览器兼容问题


语法:

$ . ajax([setting]);

参数setting 是$ . ajax()方法的参数列表,用于配置Ajax请求的键值对集合。常用配置参数如下:

$.ajax()常用配置参数
     
url String 发送请求的地址,默认为当前页地址
type String 请求方式,默认为GET
data PlainObject
或 String
或 Array
发送到服务器的数据
dataType String 预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text
timeout Number 设置请求超时时间
global Boolean 表示是否触发全局Ajax事件,默认为true
beforeSend Function ( jqXHR  jqxhr,
        PlainObject  settings )

发送请求前调用的函数,可用于设置请求头等,返回false将终止请求

参数:jqxhr:可选,jqXHR是XMLHTTPRequest的超集。

参数:setting:可选当前Ajax()方法的setting对象


success Function( 任意类型  result,
        String  textStatus,
        jqXHR  jqxhr )
请求成功后调用的函数

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

参数:textStatus:可选,描述请求状态的字符串

参数,jqxhr:可选

error Function ( jqXHR  jqxhr, 
        String  textStatus, 
        String  errorThrown )

请求失败时调用的函数

参数,jqxhr:可选

参数,textStatus:可选,错误信息

参数:errorThrown :可选,文本描述的HTTP状态

complete Function ( jqXHR  jqxhr,
        String textStatus )

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

参数:jqxhr:可选

参数:textStatus:可选,描述请求状态的字符串

     

与上述同样的问题:使用$ . ajax() 实

js代码:get请求

$(function(){
	//邮箱文本框失去焦点事件
	$("#userEmail").blur(function(){
		//获取用户输入的邮箱
		var email=$("#userEmail").val();
		if(email==null||email=="")
		{
			$("#errorEmail").text("邮箱不能为空");
		}else{
			$.ajax({
				"url":"/jsp_day10/userInfo",//要提交的URl路径
				"type":"GET",//发送的请求方式
				"data":"email="+email,//要发送到服务器的数据
				//"data":{"email":email},
				"dataType":"text",//指定返回的数据格式
				"success":function(data)//响应成功后要执行的代码:data入参表示响应结果
				{
					if(data=="true")
					{
						$("#errorEmail").text("邮箱已注册");
						$("#errorEmail").css("color","red");
					}else
					{
						$("#errorEmail").text("邮箱可以使用");
						$("#errorEmail").css("color","#00FF00");
					}
				},
				"error":function()//请求失败后要执行的代码
				{
					alert("用户ing验证错误,请稍后再试或与管理员联系!!!");
				}
			});
		}
	});
});

POST请求:没有什么太大区别

$(function(){
	//邮箱文本框失去焦点事件
	$("#userEmail").blur(function(){
		//获取用户输入的邮箱
		var email=$("#userEmail").val();
		if(email==null||email=="")
		{
			$("#errorEmail").text("邮箱不能为空");
		}else{
			$.ajax({
				"url":"/jsp_day10/userInfo",//要提交的URl路径
				"type":"POST",//发送的请求方式
				//"data":"email="+email,//要发送到服务器的数据
				"data":{"email":email},
				"dataType":"text",//指定返回的数据格式
				"success":function(data)//响应成功后要执行的代码:data入参表示响应结果
				{
					if(data=="true")
					{
						$("#errorEmail").text("邮箱已注册");
						$("#errorEmail").css("color","red");
					}else
					{
						$("#errorEmail").text("邮箱可以使用");
						$("#errorEmail").css("color","#00FF00");
					}
				},
				"error":function()//请求失败后要执行的代码
				{
					alert("用户ing验证错误,请稍后再试或与管理员联系!!!");
				}
			});
		}
	});
});

Ajax封装方法:

由于通过原生javaScript 实现 Ajax并处理响应相对比较复杂,还要考虑浏览器兼容性等一系列问题,JQuery中将

Ajax相关的操作都进行了封装,提供了$.ajax() 方法以简化Ajax开发

1、$.ajax()

2、$.get()

3、$.post()

4、$.getJSON()

5、.load()

        ……

1、$.get()方法 与 $.post()方法相同

语法:

$.get( url [, data] [, success] [, dataType] );


小栗子:同样实现上述小栗子需求

实现无刷新用户名验证
当用户名文本框失去焦点时,发送请求到服务器,判断用户名是否存在

如果已经存在提示 “用户名已被使用”,如果不存在则提示 “用户名可以使用”

js 关键代码:

$(function() {
	// 邮箱文本框失去焦点事件
	$("#userEmail").blur(function() {
		// 获取用户输入的邮箱
		var email = $("#userEmail").val();
		if (email == null || email == "") {
			$("#errorEmail").text("邮箱不能为空");
		} else {

			$.get("/jsp_day10/userInfo", "email=" + email, callBack);// 发送请求
                        //$.post("/jsp_day10/userInfo",{"email":email},callBack,"Text");
			function callBack(data) {
				if (data == "true") {
					$("#errorEmail").text("邮箱已注册");
					$("#errorEmail").css("color", "red");
				} else {
					$("#errorEmail").text("邮箱可以使用");
					$("#errorEmail").css("color", "#00FF00");
				}
			}
		}
	});
});

2、$.getJSON方法

语法:

$.getJSON( url [, data] [, success] );

关键代码:

Servlet:

if (oper.equals("list")) {
			//拼接JSON数据格式的响应内容
			StringBuffer newsJSON=new StringBuffer();
			newsJSON.append("[\"uName\",");
			newsJSON.append("\"uAge\",");
			newsJSON.append("\"uSex\",");
			newsJSON.append("\"uOccupation\",");
			newsJSON.append("\"uaddress\",");
			newsJSON.append("\"uPhone\"]");
			//System.out.println(jsonStr);
			out.print(newsJSON);
		} 

js代码:

	//getJSON格式返回数据
	$("#button").bind("click", function() {
		/**
		 * Servlet发送getJSON请求 data:返回的数据 textStatus:请求状态描述
		 */
		$.getJSON("/jsp_day11/GetJson", "oper=list", function(data, textStatus, jqxhr) {
			$.each(data, function(i, dom) {
				$("#frist").append("<p>" + dom + "</p>")
			});
		});
	});

3、使用Ajax方法直接加载HTML内容

js关键代码:

	//使用Ajax返回HTML内容
	$("#button1").bind("click", function() {
		
		$.ajax({
			"url":"/jsp_day11/GetJson",//访问的路径
			"type":"post",//请求的格式
			"data":"oper=listHTML",//请求携带的参数
			"dataType":"html",//返回预期的类型
			"success":function(data){//回调函数
				$("#frist1").html(data);
			},
			"error":function(){//异常调用函数
				alert("异常");
			}
		});
	});

Servlet关键代码:

if (oper.equals("listHTML")) {		
    out.print("<p>我是Ajax返回的html内容</p>");		
}

4、load()方法

也可以通过load方法直接加载HTML内容到指定的元素中。

语法:

$( selector ).load( url [, data] [, complete] );

.load()不是全局函数,而是针对与选择器匹配的元素执行

包含匿名回调函数,自动将返回值设置为匹配元素的HTML内容

栗子:关键代码

Servlet:

if (oper.equals("listHTML")) {
			
out.print("<p>我是Ajax返回的html内容</p>");
			
}

js:代码

//使用load()返回HTML内容
	$("#button2").bind("click", function() {
		$("#frist2").load("/jsp_day11/GetJson","oper=listHTML");
	});

扩展知识:

.load()方法还可以加载远程文档的某个部分,通过url 参数的特殊的特殊语法可以实现。URL参数中可以通过空格

连接决定加载内容的JQuery选择器。

语法:

$("#frist4").load("index.jsp #Dfrist1");

栗子:

index.jsp页面:

<body>
	<div id="Dfrist">
		<p>我是测试网页版本第一个</p>
	</div>
	<div id="Dfrist1">
		<p>我是测试网页版本第二个</p>
	</div>
</body>

js:代码读取某一部分内容:

//使用load()方式二:返回HTML内容
	$("#button4").bind("click", function() {
		$("#frist4").load("index.jsp #Dfrist1");
	});

提示:读取的内容id为 #Dfrist1整个元素

完整栗子:



使用  JSONObject生成和解析json

 JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。采用完

全独立语言的文本格式。JSON类似于实体类对象,通常用来在客户端和服务器之间传递数据。在Ajax出现之初,

客户端脚本和服务器之间传递数据使用的是XML,但XML难于解析,体积也比较大。当JSON出现时,它的轻量级

易于解析的优点,很快受到业界的广泛关注,现在大有将XML取而代之的趋势。

JSON有两种表示结构,对象和数组。

象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。
{
    key1:value1,
    key2:value2,
    ...
}

其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组

数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。

[
    {
        key1:value1,
        key2:value2 
    },
    {
         key3:value3,
         key4:value4   
    }
]


在eclipse中使用JSONObject需要引用org.json包,推荐通过maven引用,如果不会使用maven,搭建maven项目

可参考这篇文章:https://blog.csdn.net/qjyong/article/details/9098213

引用json则参考这篇文章:https://blog.csdn.net/woshimeihuo/article/details/49758645


2、直接构建JSON对象

JSONObject obj = new JSONObject();
obj.put(key, value);

直接构建即直接实例化一个JSONObject对象,而后调用其put()方法,将数据写入。put()方法的第一个参数为key

值,必须为String类型,第二个参数为value,可以为boolean、double、int、long、Object、Map以及Collection

等。当然,double以及int等类型只是在Java中,写入到json中时,统一都会以Number类型存储。

栗子:

import org.json.JSONObject;

public class JSONObjectSample {

    public static void main(String[] args) {
        createJson();
    }

    private static void createJson() {
        JSONObject obj = new JSONObject();
        obj.put("name", "John");
        obj.put("sex", "male");
        obj.put("age", 22);
        obj.put("is_student", true);
        obj.put("hobbies", new String[] {"hiking", "swimming"});
        //调用toString()方法可直接将其内容打印出来
        System.out.println(obj.toString());
    }

}

输出结果为:

{"hobbies":["hiking","swimming"],"sex":"male","name":"John","is_student":true,"age":22}

这里可以看到,为了压缩大小以便于更高效地传输,json把所有空格、换行符等空白符全部去掉了。如果想要直观

点看其内容,可以用一些在线的json解析器看,例如:http://www.jsoneditoronline.org/

2.1、使用HashMap构建:

使用HashMap构建json,实际上即先创建好一个HashMap对象并且将数据打包进去,而后在创建JSONObject时将

其作为一个参数传进去。

public class JSONObjectSample {

    public static void main(String[] args) {
        createJsonByMap();
    }

    private static void createJsonByMap() {
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("name", "John");
        data.put("sex", "male");
        data.put("age", 22);
        data.put("is_student", true);
        data.put("hobbies", new String[] {"hiking", "swimming"});
        
        JSONObject obj = new JSONObject(data);
        System.out.println(obj.toString());
    }

}

2.2、使用JavaBean构建

相较于前两种方法,实际开发中应用JavaBean构建json的情况更为常见,因为这样代码的重用率更高。

栗子:

javabean:

public class PersonInfo {

    private String name;
    private String sex;
    private int age;
    private boolean isStudent;
    private String[] hobbies;
    
    public void setName(String name) {
        this.name = name;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setStudent(boolean isStudent) {
        this.isStudent = isStudent;
    }
    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }
        //getter不能少
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
    public int getAge() {
        return age;
    }
    public boolean isStudent() {
        return isStudent;
    }
    public String[] getHobbies() {
        return hobbies;
    }
}

main:

import org.json.JSONObject;

public class JSONObjectSample {

    public static void main(String[] args) {
        createJsonByJavaBean();
    }

    private static void createJsonByJavaBean() {
        PersonInfo info = new PersonInfo();
        info.setName("John");
        info.setSex("male");
        info.setAge(22);
        info.setStudent(true);
        info.setHobbies(new String[] {"hiking", "swimming"});
        
        JSONObject obj = new JSONObject(info);
        System.out.println(obj);
    }

}

需要注意一点,JavaBean一定要有getter方法,否则会无法访问存储的数据。

3. 解析json

解析json主要是基本类型如Number、boolean等,与数组Array。

基本类型的解析直接调用JSONObject对象的getXxx(key)方法,如果获取字符串则getString(key),布尔值则

getBoolean(key),以此类推。

数组的解析稍微麻烦一点,需要通过JSONObject对象的getJSONArray(key)方法获取到一个JSONArray对象,再

调用JSONArray对象的get(i)方法获取数组元素,i为索引值。

范例:

首先在工程目录"src/main/java"下创建一个json文件,用于解析。

demo.json:

{
  "hobbies": [
    "hiking",
    "swimming"
  ],
  "sex": "male",
  "name": "John",
  "is_student": true,
  "age": 22
}
在pom.xml中加入对commons-io的依赖,以便于使用FileUtils进行文件访问:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.studying</groupId>
  <artifactId>myjson</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>myjson</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20160810</version>
    </dependency>
    <!--加入对commons-io的依赖-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
  </dependencies>
</project>

主类:

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;

public class JSONObjectSample {

    public static void main(String[] args) throws IOException {
        File file = new File("src/main/java/demo.json");
        String content = FileUtils.readFileToString(file);
        //对基本类型的解析
        JSONObject obj = new JSONObject(content);
        System.out.println("name:" + obj.getString("name"));
        System.out.println("sex:" + obj.getString("sex"));
        System.out.println("age" + obj.getInt("age"));
        System.out.println("is_student" + obj.getBoolean("is_student"));
        //对数组的解析
        JSONArray hobbies = obj.getJSONArray("hobbies");
        System.out.println("hobbies:");
        for (int i = 0; i < hobbies.length(); i++) {
            String s = (String) hobbies.get(i);
            System.out.println(s);
        }
    }
}

使用FastJSON生成JSON字符串

随着JSON的广泛使用,在服务器端生成JSON字符串成了一件麻烦的工作,效率低且易出错FastJSON一个性能很

好的、Java实现的JSON解析器和生成器。来自阿里巴巴。其代码托管在GitHub服务器上,在

https://github.com/alibaba/fastjson/releases  页面可以找到不同版本的jar文件和源代码下载路径

将Java对象序列化成JSON字符串

将JSON字符串反序列化得到Java对象

使用FastJSON

入口类:com.alibaba.fastjson.JSON,基本上常用的操作都可以通过该类的静态方法直接完成。


枚举类型 SerializerFeature 定义了多种序列化属性


栗子:

// 包含值为 null 的字段,数值为 null  输出0,String 为 null 输出“”
String  strJSON = JSON.toJSONString ( javaObject,
    SerializerFeature.WriteMapNullValue,
    SerializerFeature.WriteNullNumberAsZero,
    SerializerFeature.WriteNullStringAsEmpty );

jQuery让渡$操作符3-2

jQuery不是唯一使用 $ 的脚本库,项目中有其他同样使用 $ 的脚本库时就会引起冲突

// Prototype的 $ 会覆盖jQuery的 $
<script type="text/javascript" src="../js/jquery-1.12.4.min.js" />
<script type="text/javascript" src="../js/prototype.js" />
或者
// jQuery的 $ 会覆盖Prototype的 $
<script type="text/javascript" src="../js/prototype.js" />

<script type="text/javascript" src="../js/jquery-1.12.4.min.js" />

jQuery定义了jQuery.noConflict()方法,放弃对$的使用权,以免与其他脚本库冲突

jQuery.noConflict(); // 让渡$使用权,后续jQuery代码使用jQuery代替$

jQuery( document ).ready( … );

或者重新指定一个替代符号:

var  $j = jQuery.noConflict(); // 让渡$使用权,并指定用 $j 代替$

$j( document ).ready( … );

提示:但是无论采用哪种方式,都会改变jQuery的编码风格,不仅更加烦琐,而且对于已有jQuery代码的重用

也会产生不利影响。

为了在解决冲突的同时尽量减少对jQuery代码的影响,建议采用以下方式:

jQuery.noConflict(); // 让渡$使用权,其他脚本库可以使用$
jQuery( document ).ready( function( $ ) {
    // 在这里继续使用$编写jQuery代码
    $( "#show" ).click( … );

} );

或者

jQuery.noConflict(); // 让渡$使用权,其他脚本库可以使用$
( function( $ ) {
    // 在这里继续使用$编写jQuery代码
    $( document ).ready( function() {
        $( "#show" ).click( … );
    } );
} )( jQuery );


======仅供参考:如有问题麻烦评论指正 :三克油====

猜你喜欢

转载自blog.csdn.net/qq_41303423/article/details/80171513
今日推荐