1.获得XMLHttpRequest对象
因为XMLHttpRequest并没有标准化,所以,要区分浏览器。 function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ // 非ie浏览器 xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject('Microsoft.XMLHttp'); } return xhr; }
2.XMLHttpRequest对象(ajax对象)的重要属性
1) onreadystatechange : 绑订一个事件处理函数,该函数用来处理readystatechange事件 (当readyState属性值发生改变,就会产生该事件)。 2) responseText : 获取服务器返回的文本。 3) responseXML : 获取服务器返回的xml。 4) readyState : ajax对象在与服务器进行通讯时的一种状态,有5个值,分别是0,1,2,3,4。 比如值为4时,表示ajax对象已经成功地获取了服务器返回的所有的数据。 5) status : 状态码
3.编程步骤
第1步 : 获得ajax对象 比如: var xhr = getXhr(); 第2步 : 发送请求 xhr.open(请求方式,请求地址,同步还是异步); 注意: 请求方式: 'get'或者'post' 请求地址: 如果是get请求,需要将请求参数添加到请求地址的后面, 比如: 'check_username.do?username=zs' 同步还是异步: true表示异步,false表示同步(响应回来才能继续操作) // 绑订一个事件处理函数 xhr.onreadystatechange=f1; xhr.send(null); // get时为null参数在地址,post时放参数 第3步 : 编程服务器端的代码,跟以前相比,有一点区别就是一般不需要返回完整的页面,只需要返回部分的数据。 第4步 : 编写事件处理函数 function f1(){ if(xhr.readyState == 4){ var txt = xhr.responseText; // 更新操作... } }
4.get请求的ajax编程
function fun(){ var xhr = getXhr(); xhr.open('get','请求的servlet?参数='+'参数值',true); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ var txt = xhr.responseText; $('要显示的标签的id').innerHTML=txt; } }; xhr.send(null); }
5.post请求的ajax编程
function fun(){ var xhr = getXhr(); xhr.open('post','请求的servlet',true); xhr.setRequestHeader('content-type','application/x-www-form-urlencoded'); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ var txt = xhr.responseText; $('要显示的标签的id').innerHTML=txt; } }; xhr.send('参数='+'参数值'); }
6.my.js里的函数
// 通过id获得节点对象 function $(id) { return document.getElementById(id); } // 通过id获得value function $F(id) { return document.getElementById(id).value; } // 获取XMLHttpRequest对象 function getXhr() { var xhr = null; if (window.XMLHttpRequest) { // 非ie浏览器 xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHttp"); } return xhr; }
7.改进
6.1.实现正在检查.... post请求的ajax编程 function fun(){ var xhr = getXhr(); xhr.open('post','application/x-www-form-urlencoded'); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ var txt = xhr.responseText; $('要显示的标签的id').innerHTML=txt; } }; //实现正在检查.... $('要显示的标签的id').innerHTML="正在检查..."; xhr.send('参数='+'参数值'); } 6.2.图片的使用 //servlet里发送 out.println("<img src='images/unchecked.gif'/>验证码错误");
6.3.系统异常的处理 post请求的ajax编程 function fun(){ var xhr = getXhr(); xhr.open('post','application/x-www-form-urlencoded'); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ //200为正确运行 if(xhr.status == 200){ var txt = xhr.responseText; $('要显示的标签的id').innerHTML=txt; }else{ $('要显示的标签的id').innerHTML = '系统错误'; } } }; $('要显示的标签的id').innerHTML="正在检查..."; xhr.send('参数='+'参数值'); }
8、编码问题
8.1.get step1.tomcat的server.xml,添加 URIEncoding="utf-8" step2,使用encodeURI函数对请求地址进行编码。(使用utf-8这种编码格式) 8.2.post xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
request.setCharacterEncoding("utf-8")就可以解决编码问题
9.json来做数据交换
9.1.java对象转换成json字符串 第1步:导入jar包 第2步: //一个对象 JSONObject obj=JSONObject.fromObject("javabean对象"); String jsonStr=obj.toString(); //对象集合或数组 JSONArray obj=JSONArray.fromObject("javabean对象集合"); String jsonStr=obj.toString();
9.2.json字符串转换成javascript对象 可以使用prototype提供的evalJSON函数 例子: var txt = xhr.responseText; //txt是一个json字符串,先转换 //成一个javascript对象组成的数组 //将json字符串转换成一个js对象 //如果是json集合或数组,会得到一个js对象的数组 var arr = txt.evalJSON();
10.prototype.js文件的常用方法
10.1. $(id) : 相当于document.getElementById(id); 10.2. $F(id): 相当于document.getElementById(id).value; 10.3. $(id1,id2,id3...):使用id1,id3...分别去查找对应的节点,返回由这些节点组成的数组 10.4. strip(): 除掉字符串两端的空格 10.5. evalJSON() : 将json字符串转换成javascript对象
11.ajax局部更新技术
jsp文件中每个一段时间调用一下ajax对象,把返回的数据显示出来,局部更新 例子: function f1(){ //每隔多少秒调用f2函数 setInterval(f2,毫秒数); } function f2(){ //ajax编程代码 }
12.json数据转换-处理日期类型
第1步:写一个转换器 写一个java类,实现JsonValueProcessor接口 第2步:实现两个process方法,按照你自己的要求,定义转换规则 第3步:创建JsonConfig对象,使用该对象注册转换器 第4步:JSONArray.fromObject(srcObj,JsonConfig);
例子: //创建一个转换器 (转换器java类) processor = new (转换器java类); processor.setPattern("yyyy-MM-dd"); //注册转换器 JsonConfig config = new JsonConfig(); config.registerJsonValueProcessor(Date.class,processor); //利用转换器,生成json字符串 JSONObject obj = JSONObject.fromObject(user,config);
13.同步
会等待服务器响应,当前页面被锁定了 xhr.open('get/post','check_username.do',false); 提交按钮的onclick="return f1();"//f1()返回true或则false
14.清空提示
$('xxx').innerHTML="";
15.服务器返回一个字符串,客户端判断,显示不同的数据
这时服务端输出用print 。。println有换行和回车比较字符串时有问题 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|