ajax、javascript学习笔记1
2011-05-03 19:13
357 查看
●简介
Asynchronous Javascript And Xml
异步的javascript和xml
·使用XHTML和CSS的基于标准的表示技术
·使用DOM进行动态显示和交互
·使用XML和XSLT进行数据交换和处理
·使用XMLHTTPREQUEST进行异步数据检索:页面端javascript的浏览器内置对象
·使用Javascript将以上技术融合
与传统模式的对比
//1.取参数
//2.看参数是否有问题
//3.校验操作
//4.和传统应用不同之处,这一步需要将用户感兴趣的数据返回给页面端,而不是将新页面发送给用户。
●初步使用 jquery
html中
包含js文件代码 <script type="text/javascript" src="jslib/jquery.js" ></script>
<script type="text/javascript" src="jslib/verify.js" ></script> 在webroot目录下有个jslib目录下有个verifu.js文件
js文件中
●使用httpxmlrequest的api实现ajax的javascript代码
●当servlet返回的是一个xml文本时用httpxmlrequest对象接收
即返回一个带有<asdf>asdf</asdf>
这样的文本时
需要在javascript中解析出文本的内容然后将其显示
●当servlet返回一个xml时候用jquery对象接收
●浏览器缓存问题和中文问题
IE会根据url地址来判断是否读取缓存
所以我们给每次的url加一个时间即可骗过IE
如换一张图片
<img src="ImageServer" /> src一般是一个servlet服务器返回的图片信息
<a onclick="changimg()" href="#">换一张</a>
●跨域访问
在浏览器端代码中,我们需要在调用open方法之前判断一下要连接的地址是不是以
http开头的,如果是则认为要访问的是跨域资源,首先将当前url中的?变成&,这是
因为将要连接的地址改为"proxy?url="以后如果原来url地址中有参数的话,新的url
地址中就会有两个"?"导致服务器端解析参数错误,"url"之后的内容表示本来要访问
的跨域资源的地址。
服务器端代码较复杂自行百度谷歌 :)
Asynchronous Javascript And Xml
异步的javascript和xml
·使用XHTML和CSS的基于标准的表示技术
·使用DOM进行动态显示和交互
·使用XML和XSLT进行数据交换和处理
·使用XMLHTTPREQUEST进行异步数据检索:页面端javascript的浏览器内置对象
·使用Javascript将以上技术融合
与传统模式的对比
//1.取参数
//2.看参数是否有问题
//3.校验操作
//4.和传统应用不同之处,这一步需要将用户感兴趣的数据返回给页面端,而不是将新页面发送给用户。
●初步使用 jquery
html中
包含js文件代码 <script type="text/javascript" src="jslib/jquery.js" ></script>
<script type="text/javascript" src="jslib/verify.js" ></script> 在webroot目录下有个jslib目录下有个verifu.js文件
<!--基于标准的一些好习惯,1标签名要小写,2标签必须关闭,3属性名必须小写 4 属性值应放到双引号--> itcast.cn用户名校验的ajax实例,请输入用户名: <br/> <!--ajax方式下不需要使用表单来进行数据提交,因此不用写表单标签--> <!--ajax方式不需要name属性,需要一个id属性--> <input type="text" id="userName" /> <input type="button" value="校验" onclick="verify()"> <!--这个div用于存放服务器端返回的信息,开始为空--> <!--id属性定义是为了利用dom的方式找到某个节点,进行操作--> <!--div 是CSS中的块级元素--> <div id="result"></div> <!--<div id="result">123</div><div id="result1">456</div>--> <!-- span是CSS中的内联元素--> <!--<span>123</span><span>456</span>--> <!--div和span的直观差异,div占独行,span与其前后元素相处很好-->
js文件中
function verify(){ //首先测试一下页面的按钮按下,可以调用这个方法 //使用javascript的alert方法,显示一个弹出提示框 //alert("按钮被点击了"); //1.获取文本框的内容 // document.getElementById("userName"); dom的方式 //Jquery的查找节点的方式,参数中#加上id属性值可以找到一个节点,这是css23定义的表达式方式 //Jquery的方法返回的都是jquery的对象,可以继续在上面执行其他的jquery方法 var jqueryobj = $("#userName"); //获取节点的值 var userName = jqueryobj.val(); //alert(userName); //2. 将文本狂中的数据发送给服务器的servlet //使用jquery的XMLHTTPrequrst对象法人请求封装 $.get("AJAXServer?name="+userName,null,callback); //回调函数 function callback(data){ //alert("服务器端的数据回来了"); //3. 接受服务端的返回的数据 //alert(data); //4. 将服务器端返回的数据动态显示到页面上 //找到保存结果信息的节点 var resultObj =$("#result"); resultObj.html(data); alert(""); } }
●使用httpxmlrequest的api实现ajax的javascript代码
//用户名校验的方法 //这个方法使用XMLHTTPRequest对象进行AJAX的异步数据交互 var xmlhttp; function verify(){ //1.使用dom的方式获取文本框中的值 //document.getElementBuId("userName")是dom中获取元素节点的一种方法,一个元素节点对应HTML页面中的一个标签,如果<input> //.value可以获取一个元素节点的value属性值 var userName = document.getElementById("userName").value; //2.创建XMLHttpRequest对象 //这是XMLHttpRequest兑现使用中最为复杂的一步 //需要这对IE和其他类型浏览器建立这个对象的不方式写不同的代码 if(window.XMLHttpRequest){ //针对FireFox,Mozillar,opera,safari,IE7,IE8 xmlhttp = new XMLHttpRequest(); //针对某些特定版本的mozillar浏览器的bug修正 if(xmlhttp.overrideMimeType){ xmlhttp.overrideMimeType("text/xml") } }else if(window.ActiveXObject){ //针对IE5,IE5.5,IE6(IE7,IE8) //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js数组中 //排在前面的版本较新 var activexName =["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<activexName.length;i++){ try{ //取出一个控件名进行创建,如果创建成功就终止循环 //如果创建失败,抛出异常,然后继续循环,继续尝试创建 xmlhttp = new ActiveXObject(activexName[i]); break; } catch(e){ } } } // 确认XMLHttpRequest对象创建成功 // if(!xmlhttp){ // alert("XMLHttpRequest对象创建失败!"); // return; // }else{ // //alert(xmlhttp); // alert(xmlhttp.readyState); // } //2 注册回调函数 //注册回调函数时只需要函数名不要加括号 //我们需要注册的是函数名称,如果加上括号,就把函数的返回值给注册上了,这是错误的 xmlhttp.onreadystatechange = callback; //3设置连接信息 //第一个参数表示http的请求方式。支持所有http的请求方式。主要使用get和post //第二个参数表示请求的url地址,get方式的参数也在url中 //第三个参数表示采用异步还是同步方式交互,true表示异步 //GET方式请求的代码 //xmlhttp.open("GET","AJAXServer?name="+userName,true); //POST方式请求的代码 xmlhttp.open("POST","AJAXServer",true); //POST方式需要自己设置http的请求头 xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //POST方式发送数据 xmlhttp.send("name="+userName); //4 发送数据,开始和服务器端进行交互 //同步方式下,send这句话会在服务器设置回来后才执行完 //异步方式,send这句话执行晚会立即完成 //GET方式 //xmlhttp.send(null); } //回调函数 function callback(){ // alert(xmlhttp.readyState); //5接收响应数据 //判断对象的状态是交互完成 if(xmlhttp.readyState==4){ //判断http的交互是否成功、 if(xmlhttp.status==200){ //获取服务器端返回的数据 //获取服务器端输出的纯文本数据 var responseText = xmlhttp.responseText; //将数据显示在页面上 //通过dom方式找到div标签所对应的元素节点 var divNode = document.getElementById("result"); //设置元素节点中的html内容 divNode.innerHTML=responseText; }else { alert("出错了"); } } }
●当servlet返回的是一个xml文本时用httpxmlrequest对象接收
即返回一个带有<asdf>asdf</asdf>
这样的文本时
需要在javascript中解析出文本的内容然后将其显示
//用户名校验的方法 //这个方法使用XMLHTTPRequest对象进行AJAX的异步数据交互 var xmlhttp; function verify(){ //1.使用dom的方式获取文本框中的值 //document.getElementBuId("userName")是dom中获取元素节点的一种方法,一个元素节点对应HTML页面中的一个标签,如果<input> //.value可以获取一个元素节点的value属性值 var userName = document.getElementById("userName").value; //2.创建XMLHttpRequest对象 //这是XMLHttpRequest兑现使用中最为复杂的一步 //需要这对IE和其他类型浏览器建立这个对象的不方式写不同的代码 if(window.XMLHttpRequest){ //针对FireFox,Mozillar,opera,safari,IE7,IE8 xmlhttp = new XMLHttpRequest(); //针对某些特定版本的mozillar浏览器的bug修正 if(xmlhttp.overrideMimeType){ xmlhttp.overrideMimeType("text/xml") } }else if(window.ActiveXObject){ //针对IE5,IE5.5,IE6(IE7,IE8) //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js数组中 //排在前面的版本较新 var activexName =["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<activexName.length;i++){ try{ //取出一个控件名进行创建,如果创建成功就终止循环 //如果创建失败,抛出异常,然后继续循环,继续尝试创建 xmlhttp = new ActiveXObject(activexName[i]); break; } catch(e){ } } } // 确认XMLHttpRequest对象创建成功 // if(!xmlhttp){ // alert("XMLHttpRequest对象创建失败!"); // return; // }else{ // //alert(xmlhttp); // alert(xmlhttp.readyState); // } //2 注册回调函数 //注册回调函数时只需要函数名不要加括号 //我们需要注册的是函数名称,如果加上括号,就把函数的返回值给注册上了,这是错误的 xmlhttp.onreadystatechange = callback; //3设置连接信息 //第一个参数表示http的请求方式。支持所有http的请求方式。主要使用get和post //第二个参数表示请求的url地址,get方式的参数也在url中 //第三个参数表示采用异步还是同步方式交互,true表示异步 //GET方式请求的代码 //xmlhttp.open("GET","AJAXServer?name="+userName,true); //POST方式请求的代码 xmlhttp.open("POST","AJAXXMLServer",true); //POST方式需要自己设置http的请求头 xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //POST方式发送数据 xmlhttp.send("name="+userName); //4 发送数据,开始和服务器端进行交互 //同步方式下,send这句话会在服务器设置回来后才执行完 //异步方式,send这句话执行晚会立即完成 //GET方式 //xmlhttp.send(null); } //回调函数 function callback(){ // alert(xmlhttp.readyState); //5接收响应数据 //判断对象的状态是交互完成 if(xmlhttp.readyState==4){ //判断http的交互是否成功、 if(xmlhttp.status==200){ //获取服务器端返回的数据 //使用responseXML的方式接受XML数据对象的Dom对象 var domObj =xmlhttp.responseXML; if(domObj){ //<message>1231234</message> //dom中利用getElementsByTagName可以根据标签名来获取元素节点,返回的是一个数组 var messageNodes= domObj.getElementsByTagName("message"); if(messageNodes.length>0){ //获取message节点中的文本内容 //message标签中的文本在dom中是message标签对应的元素的子节点,firstChild可以获取到当前节点的第一个子节点 //通过以下方式就可以获得到文本内容所以对应的节点 var textNode = messageNodes[0].firstChild; //对于文本节点来说,可以通过nodeValue的方式返回文本节点的文本内容 var responseMessage = textNode.nodeValue; //将数据显示在页面上 //通过dom方式找到div标签所对应的元素节点 var divNode = document.getElementById("result"); //设置元素节点中的html内容 divNode.innerHTML=responseMessage; } else{ alert("XML数据格式错误,原始文本内容为:"+xmlhttp.responseText); } }else{ alert("XML数据格式错误,原始文本内容为:"+xmlhttp.responseText); } }else { alert("出错了"); } } }
●当servlet返回一个xml时候用jquery对象接收
//定义用户名娇艳的方法 function verify(){ //首先测试一下页面的按钮按下,可以调用这个方法 //使用javascript的alert方法,显示一个弹出提示框 //alert("按钮被点击了"); //1.获取文本框的内容 // document.getElementById("userName"); dom的方式 //Jquery的查找节点的方式,参数中#加上id属性值可以找到一个节点,这是css23定义的表达式方式 //Jquery的方法返回的都是jquery的对象,可以继续在上面执行其他的jquery方法 var jqueryobj = $("#userName"); //获取节点的值 var userName = jqueryobj.val(); //alert(userName); //2. 将文本狂中的数据发送给服务器的servlet //javaScript当中,一个简单的对象的定义方式 var obj={name:123,age:20}; //使用jquery的XMLHTTPrequrst对象法人请求封装 $.ajax({ type: "POST", //http的请求方式 url:"AJAXXMLServer", //服务器段的URL地址 data:"name="+userName, //发送到服务器端的数据 dataType: "xml", //告诉Jquery返回的数据格式 success: callback //定义交互完成 且服务器正确返回数据时调用的回调函数 }); //回调函数 function callback(data){ //alert("服务器端的数据回来了"); //3. 接受服务端的返回的数据 //需要将data这个doom对象中的数据解析出来 //首先需要将dom的对象转换成JQuery对象 var jqueryObj = $(data); //获取message节点 var message =jqueryObj.children(); //获取文本内容 var text=message.text(); //4. 将服务器端返回的数据动态显示到页面上 //找到保存结果信息的节点 var resultObj =$("#result"); resultObj.html(text); } }
●浏览器缓存问题和中文问题
IE会根据url地址来判断是否读取缓存
所以我们给每次的url加一个时间即可骗过IE
function verify(){ //解决中文问题的方法 1.页面端发出的数据做一次encodeURI,服务器端使用new String(old.getBytes("iso8859-1"),"UTF-8"); //解决中文问题的方法 2.页面端发出的数据做两次encodeURI,服务器端使用String name = URLDecoder.decode(old,"UTF-8"); var url="AJAXServer?name="+encodeURI($("#userName").val()); //var url="AJAXServer?name="+encodeURI(encodeURI($("#userName").val())); url= converURL(url); $.get(url,null,function(data){ $("#result").html(data); }); } //给url地址增加时间戳,骗过浏览器,不读取缓存 function converURL(url){ //获取时间戳 var timstamp = new Date().valueOf(); //将时间戳品拼接到url上 //url="AJAXServer" //indexOf("?")查看字符串中是否有? if(url.indexOf("?")>=0){ url=url + "&t=" + timstamp; }else{ url=url + "?t=" + timstamp; } return url; }
如换一张图片
<img src="ImageServer" /> src一般是一个servlet服务器返回的图片信息
<a onclick="changimg()" href="#">换一张</a>
●跨域访问
在浏览器端代码中,我们需要在调用open方法之前判断一下要连接的地址是不是以
http开头的,如果是则认为要访问的是跨域资源,首先将当前url中的?变成&,这是
因为将要连接的地址改为"proxy?url="以后如果原来url地址中有参数的话,新的url
地址中就会有两个"?"导致服务器端解析参数错误,"url"之后的内容表示本来要访问
的跨域资源的地址。
function convertURL(url){ if(url.substring(0,7)=="http://"){ url=url.replace("?","&"); url="proxy?url="+url; } return url; }
服务器端代码较复杂自行百度谷歌 :)
相关文章推荐
- JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
- 学习笔记 通过javascript ajax方式手动封装表单进行文件上传
- 【jQuery学习笔记----AJAX之javascript角度】
- ajax学习笔记一:面向对象的javascript
- JavaScript高级程序设计 XML、Ajax 学习笔记
- Asp.Net Ajax 学习笔记9 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(上)
- Javascript学习笔记十二——Ajax入门
- javascript学习笔记 (六)-ajax相关
- JavaScript学习笔记之JSON&Ajax
- javascript学习笔记(一) (2007-12-20 11:14:19| 分类: jsp+html+js+Ajax)
- 【前端学习笔记】原生Javascript中的ajax
- web开发-javascript编程prototype、this、ajax、json、结构体和数组-学习笔记十四
- 21天学通Java学习笔记-Day13(javascript-ajax)
- javascript学习笔记(七)Ajax和Http状态码
- JavaScript学习笔记二十六:AJAX
- javascript dom 学习笔记(三),ajax
- [翻译]javascript学习笔记 (六)-ajax相关
- javascript-ajax之json学习笔记
- Asp.Net Ajax 学习笔记21 VS2008的JavaScript代码提示功能
- [JavaScript]学习笔记:AJAX