Ajax篇--02 Ajax编码问题及Json的使用
一、Ajax编码问题
1.如果是get请求
ie游览器会使用gbk进行编码,而其他游览器会使用utf-8来编码。服务器端默认使用iso-8859-1来解码,所以会产生乱码。
解决方法:
step1:让服务器端统一使用utf-8解码
URIEncoding="utf-8"
step2:游览器使用encodeURI函数来编码。
2.如果是post请求
游览器都会使用utf-8来编码,服务器端默认使用iso-8859-1来解码,所以会产生乱码。
req.setCharacterEncoding("utf-8");
二、JSON(JavaScript object notation)
1.JSON是什么?
是一种轻量级的数据交换格式。
注:
数据交换:将要交换的数据先转换成一种与平台无关的数据格式,然后交给接收方来处理。
轻量级:相对于xml,JSON文档更小,解析的速度更快。
2.语法
(1)表示一个对象
{属性名:属性值,属性名:属性值...}
注:
a.属性名必须使用双引号括起来
b.属性值的类型可以使string,number,true/false,null,object
c.属性值如果是string,必须使用双引号括起来。
(2)表示一个由对象组成的数组
[{},{},{}...]
3.使用JSON
(1)将java对象转换成json字符串
可以使用json官方的工具(json-lib)。JSONObject、JSONArray
(2)使用json官方工具json-lib
JavaScript内置对象JSON提供的parse()方法
Click me
Click me
Click me
Click me
Click me
三、JQuery对ajax的支持
用法:
(1)$.ajax({})方法
说明:{}是一个用来描述请求选项参数的对象。常见的选项参数有如下几个:
url:请求地址
data:请求参数,有两种格式
第一种格式:请求字符串,比如“adminCode=Sally”.
第二种格式:对象,比如{“adminCode”:“Sally”}
type:请求类型
dataType:服务器返回的数据的类型
text:文本数据
json:json字符串
html:html文档
xml:xml文档
script:JavaScript脚本
success:事件处理函数(当服务器处理正常,用来处理服务器返回的数据)
error:事件处理函数(当服务器处理异常,用来处理服务器返回的数据)
(2)load()方法
用法:向服务器发送异步请求,然后将服务器返回的数据直接添加到符合要求的节点之上。
用法:$obj.load();
实例、使用json数据交换,同时ajax更新 股票行情例子和幸运数字的例子
(1)bean包下的Stock.java
package bean;
public class Stock {
private String code;
private String name;
private int price;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Stock [code=" + code + ", name=" + name + ", price=" + price + "]";
}
}
web.servlet
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.Stock;
import net.sf.json.JSONArray;
public class ActionServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
System.out.println("service()");
req.setCharacterEncoding("utf-8");
//获得请求资源路径http://ip.port/ajax_day01/check.do
String uri = req.getRequestURI();
System.out.println("uri:"+uri);
//分析请求资源路径
String action=uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
System.out.println("action:"+action);
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
//依据分析的结果,进行不同的处理
if("/quoto".equals(action)) {
//模拟生成几只股票的信息
List stocks=new ArrayList();
Random random=new Random();
for(int i=0;i<8;i++) {
Stock stock = new Stock();
stock.setCode("60087"+i);
stock.setName("china"+i);
stock.setPrice(random.nextInt(1000));
stocks.add(stock);
}
JSONArray jsonArray = JSONArray.fromObject(stocks);
String jString = jsonArray.toString();
System.out.println(jString);
out.println(jString);
}else if("/getLucky".equals(action)) {
Random random=new Random();
int number = random.nextInt(8888);
System.out.println("number:"+number);
out.println(number);
}
}
}
stock.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
股票行情
代码
名称
价格
lucky.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
幸运数字
你的幸运数字是:
web.xml
ajax_day02
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
action
web.ActionServlet
action
*.do