ajax ajax : (asynchrous javascript and xml) 异步的 是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个特殊对象(XMLHttpRequest)也叫 ajax对象,向服务器发送异步请求,服务器返回部分数据,浏览器对这些数据 进行页面部分修改, 整个过程,页面无刷新,不打断用户操作 获得ajax对象: 区分浏览器 兼容性:ie5.5 ActiveObject 其他: XMLHttpRequest ajax重要属性: onreadystatechange :用来绑定事件处理函数,处理readystatechange事件 readyState :值(0,1,2,3,4)表示ajax对象和服务器通信的状态 4表示获得所有数据 responseText :获得服务器返回的文本数据 responseXML : 获得服务器返回的xml数据 status : 获得状态码, 404,500,200, 编程步骤: 1. 获得ajax对象 2.发送请求 get:(1)xhr.open('get','check_uname.do?uname=tom&age',true), true表示异步 (2)xhr.onreadystatechange=f1; (3)xhr.send(null); post:(1)xhr.open('post','check.do',true); (2)xhr.setRequestHeader('content-type','application/x-www-form-urlencoded'); 注:按照http协议规范,如发送post请求,在请求数据包里应该带content-type 消息头,默认不带,用xhr.setRequestHander()设置 (3)xhr.onreadystatechange=f1; (4)xhr.send('name=tom'); 3.编写服务端的程序 (返回部分数据(文本)) //获得请求资源路径:端口号之后都是 String uri=request.getRequestURI(); System.out.println(uri); //截取部分路径 String action =uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf(".")); System.out.println(action); //得到输出对象 response.setContentType("text/html;charset=utf-8"); PrintWriter out =response.getWriter(); out.print("ok!"); 4.编写事件处理函数 function f1(){ if(xhr.readyState==4 && xhr.status==200){ var txt=xhr.responseText; } } 编码问题: 1.发送get请求:id 使用gbk编码,其他使用utf-8编码,服务器使用ios-8859-1编码 解决方法:1》服务端通一使用utf-8 URIEncoding=utf-8 2》浏览器使用encodeURI函数来编码, encodeURI是javascript内置函数 2.发送post请求:浏览器都使用utf-8编码,服务器端使用ISO-8859-1来编码 解决方法:request.setCharacterEncoding("utf-8"); JSON(javascript object notation) 是一种轻量级的数据交换格式。 将数据先转换成一种与平台无关的数据格式然后交给对方来处理。 轻量级:相对于xml,json文档更小,解析速度更快 。官网www.json.org 语法 {属性名:值,属性名:值....},可以保存对象数组、对象。 取值范围:number、String、boolean、null、object 使用json:1.导包:json-lib.jar 2.java对象转换字符串: JSONObject jsonobj =JSONObject.fromObject(s); String jsonStr=jsonobj.toString(); 3.多个对象组成的数组或集合转换json字符串 JSONArray jsonArr=JSONArray.fromObject(array); String jsonStr=jsonArr.toString(); 4.json字符串转换javascript对象:JSON.parse(json字符串); jquery对ajax的支持 : 1. $.ajax({})方法 。 {}是一个用来描述请求选项参数的对象 参数:url: 请求地址 data:请求参数-->(1)请求字符串 "admin=saiiy" (2)对象{“admin”:“sally”} type:请求类型(get/post) dataType:服务器返回的数据类型 text、json、html、xml、javascript success:事件处理函数(处理服务器正常的数据) error:事件处理函数(处理服务器异常的数据) 2.load() 作用:向服务器发送异步请求,然后将返回的数据直接添加到符合要求的节点上 用法:$obj.load(url,[data]); jquery的async:false,这个属性 默认是true:异步,false:同步。 //异步请求数据 $.ajax({ type: "get",//数据发送的方式(post 或者 get) url: "qxAutoStation2",//要发送的后台地址 data: {timeStart:"12",timeStop:"14"},//要发送的数据(参数)格式为{'val1':"1","val2":"2"} dataType: "String",//后台处理后返回的数据格式 success: function (data) {//ajax请求成功后触发的方法 alert('请求成功'); }, error: function (msg) {//ajax请求失败后触发的方法 alert(msg);//弹出错误信息 } }); ajax跨域请求 jsonp 缓存问题: 当使用 ie 浏览器发送get请求,浏览器会查看请求地址是否访问过,如果有则不再发送请求 它会缓存第一次的请求结果 解决方法:在请求地址后面添加一个随机数