项目中有用到,正好复习总结下:
JavaScript:
var p = {
id:1,
name:"哈哈",
tel:[
{
no:"135",
type:"中移动"
},
{
no:"133",
type:"中联通"
}
],
show:function(username){
alert("你的姓名是:" + p.name+":"+username);
},
isSingle:false
};
Java:
<span style="white-space:pre"> </span>List<City> cityList = new ArrayList<City>();
<span style="white-space:pre"> </span>cityList.add(new City(1,"中山"));
<span style="white-space:pre"> </span>cityList.add(new City(2,"佛山"));
<span style="white-space:pre"> </span>Province province = new Province(1,"广东",cityList);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>JSONArray jSONArray = JSONArray.fromObject(province);
<span style="white-space:pre"> </span>String jsonJAVA = jSONArray.toString();
<span style="white-space:pre"> </span>System.out.println(jsonJAVA);
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span> [
<span style="white-space:pre"> </span> {
<span style="white-space:pre"> </span> "id":1,
<span style="white-space:pre"> </span> "name":"广东"
<span style="white-space:pre"> </span> "cityList":[{"id":1,"name":"中山"},{"id":2,"name":"佛山"}],
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> ]
<span style="white-space:pre"> </span> */
jQuery方式ajax:
$.load(url,sendData,function(a,b,ajax){
var jsonJAVA = ajax.responseText;
var jsonJS = eval("("+jsonJAVA+")");
var strTime = jsonJS.strTime;
$("span:first").html(strTime).css("color","red");
$("span:last").html(strTime).css("color","blue");
});
$.ajax({
"type":"POST",
"url":"${pageContext.request.contextPath}/findCityByProvince?time="+new Date().getTime(),
"sendData":{"province":province},
"success":function(backData,textStatus,ajax){
//js对象
var city = backData.cityList;
//jquery对象
var $city = $(city);
//each()
$city.each(function(){
//this表示每个城市
var $option = $("<option>" + this + "</option>");
$("#city").append( $option );
});
上面的new Date().getTime()是针对IE浏览器不能重复提交的问题
使用第三方工具,将JavaBean对象/List或Set或Map对象转成JSON
准备导入第三方jar包:
》commons-beanutils-1.7.0.jar
》commons-collections-3.1.jar
》commons-lang-2.5.jar
》commons-logging-1.1.1.jar
》ezmorph-1.0.3.jar
》json-lib-2.1-jdk15.jar
(1)JavaBean----->JSON
》JSONArray jsonArray = JSONArray.fromObject(city);
》String jsonJAVA = jsonArray.toString();
(2)List<JavaBean>----->JSON
》JSONArray jsonArray = JSONArray.fromObject(cityList);
》String jsonJAVA = jsonArray.toString();
(3)List<String>----->JSON
》JSONArray jsonArray = JSONArray.fromObject(stringList);
》String jsonJAVA = jsonArray.toString();
(4)Set<JavaBean>----->JSON
》JSONArray jsonArray = JSONArray.fromObject(citySet);
》String jsonJAVA = jsonArray.toString();
(5)Map<String,Object>----->JSON
》JSONArray jsonArray = JSONArray.fromObject(map);
》String jsonJAVA = jsonArray.toString();
以IO流的方式将值输出到AJAX异步对象中
servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String username = request.getParameter("username");
byte[] buf = username.getBytes("ISO8859-1");
username = new String(buf,"UTF-8");
System.out.println("username=" + username);
String tip = "<font color='green'>可以注册</font>";
if("杰克".equals(username)){
tip = "<font color='red'>该用户已存在</font>";
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.write(tip);
pw.flush();
pw.close();
}
action:
public String check() throws Exception {
//图片路径
String tip = "images/MsgError.gif";
//从服务器获取session中的验证码
String checkcodeServer = (String) ActionContext.getContext().getSession().get("CHECKNUM");
//将客户端的验证码与服务端的验证码进行比较
if(checkcode.equals(checkcodeServer)){
tip = "images/MsgSent.gif";
}
//以IO流的方式将tip变量的值输出到AJAX异步对象中
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.write(tip);
pw.flush();
pw.close();
//以下方式不是最好的,但可以完成AJAX异步交互
return null;
}
或者
action:
/**
* 根据省份查询城市
*/
public String findCityByProvinceMethod() throws Exception{
cityList = new ArrayList<String>();
if("湖北".equals(province)){
cityList.add("武汉");
cityList.add("黄岗");
}else if("湖南".equals(province)){
cityList.add("岳阳");
cityList.add("张家界");
}else if("广东".equals(province)){
cityList.add("韶关");
cityList.add("东莞");
}
return "ok";
}
/**
* 根据城市查询区域
*/
public String findAreaByCityMethod() throws Exception{
areaList = new ArrayList<String>();
if("武汉".equals(city)){
areaList.add("AA");
areaList.add("BB");
}else if("黄岗".equals(city)){
areaList.add("CC");
areaList.add("DD");
}else if("岳阳".equals(city)){
areaList.add("EE");
areaList.add("FF");
}else if("张家界".equals(city)){
areaList.add("GG");
areaList.add("HH");
}else if("韶关".equals(city)){
areaList.add("II");
areaList.add("JJ");
}else if("东莞".equals(city)){
areaList.add("KK");
areaList.add("LL");
}
return "ok";
}
<span style="white-space:pre"> </span>private List<String> cityList;
private List<String> areaList;
public List<String> getCityList() {
return cityList;
}
public List<String> getAreaList() {
return areaList;
}
Struts.xml extends="json-default"
<package name="provinceCityAreaPackage" extends="json-default" namespace="/">
<action
name="findCityByProvinceRequest"
class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction"
method="findCityByProvinceMethod">
<result name="ok" type="json">
</result>
</action>
</package>
导入:
<span style="white-space:pre"> </span>struts2-json-plugin-2.3.1.1.jar
地址栏编码和解码的问题:
js:
//对汉字进行UTF-8(U8)的编码
username = encodeURI(username);
java:
//对汉字进行UTF-8的解码
String username = request.getParameter("username");
byte[] buf = username.getBytes("ISO8859-1");
username = new String(buf,"UTF-8");
origialStr=URLEncoder.encode(origialStr,"UTF-8");
origialStr=URLDecoder.decode(origialStr,"utf-8");//感觉和上面的解码没有太大区别?
先到这里,编程尽量不要熬夜哟