Ajax篇--02 Ajax编码问题及Json的使用

Ajax篇--02 Ajax编码问题及Json的使用

一、Ajax编码问题

1.如果是get请求

ie游览器会使用gbk进行编码,而其他游览器会使用utf-8来编码。服务器端默认使用iso-8859-1来解码,所以会产生乱码。

解决方法:

step1:让服务器端统一使用utf-8解码

URIEncoding="utf-8"

 Ajax篇--02 Ajax编码问题及Json的使用_第1张图片

step2:游览器使用encodeURI函数来编码。

Ajax篇--02 Ajax编码问题及Json的使用_第2张图片

2.如果是post请求

游览器都会使用utf-8来编码,服务器端默认使用iso-8859-1来解码,所以会产生乱码。

req.setCharacterEncoding("utf-8");

 Ajax篇--02 Ajax编码问题及Json的使用_第3张图片

 

二、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更新 股票行情例子和幸运数字的例子

                                Ajax篇--02 Ajax编码问题及Json的使用_第4张图片

(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
  


 

 

 

 

 

 

你可能感兴趣的:(javaweb的学习路径,javaweb封神之路)