第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON
第88节:java中的ajax和jquery
ajax是什么?有什么用?原理,怎么用?
ajax是asynchronous javascript and xml
(异步javascript和xml),是指一种创建交互式网页应用的网页开发技术。
如用户注册,输入的用户名,提示已经被注册了。
ajax
asynchronous javascript and xml
ajax是一种不用重新加载整个网页的情况下,能够更新部分网页的技术。
什么是ajax?
是 异步 javascript 和 xml,是一种用于快速动态网页的技术,能够在后台与服务器进行少量的数据交换,就可以实现网页的异步更新了,就不用重新加载整个网页,让部分需要进行更新的内容进行更新了。
ajax
实例
<html> <body> // div 来自服务器的信息 <div id="mydiv"> <h3>dashucoding</h3> </div> <button type="button" onclick="loadxmldoc()">change content</button> </body> </html>
<head> <script type="text/javascript"> function loadxmldoc() { .... ajax ... } </script> </head>
创建 xmlhttprequest
对象
xmlhttprequest
是 ajax
的基础xmlhttprequest
用于在后台与服务器交换数据
ie5 和 ie6 使用 activexobject
创建对象:
variable=new xmlhttprequest();
var xmlhttp; if (window.xmlhttprequest) { xmlhttp=new xmlhttprequest(); } else { // code for ie6, ie5 xmlhttp=new activexobject("microsoft.xmlhttp"); }
xmlhttprequest
对象用于和服务器交换数据
xmlhttp.open("get","test1.txt",true); xmlhttp.send(); open(method,url,async) method get 或 post 请求的类型 url async true(异步)或 false(同步) send(string) 将请求发送到服务器 仅用于 post 请求
get 和 post:
get更快更简单。使用post的情况:
- 无法使用缓冲文件
- 向服务器发送大量数据
- 发送未知字符
get 请求
xmlhttp.open("get","demo_get.asp",true); xmlhttp.send();
xmlhttp.open("get","demo_get2.asp?fname=dashu&lname=coding",true); xmlhttp.send();
post 请求
xmlhttp.open("post","demo_post.asp",true); xmlhttp.send();
xmlhttp.open("post","ajax_test.asp",true); xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=dashu&lname=coding"); // setrequestheader(header,value) header: 规定头的名称 value: 规定头的值
url
- 服务器上的文件
xmlhttp.open("get","ajax_test.asp",true); // 可以是任何类型的文件
true 或 false
异步 javascript 和 xml
xmlhttp.open("get","ajax_test.asp",true);
xmlhttp.onreadystatechange=function() { if (xmlhttp.readystate==4 && xmlhttp.status==200) { document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext; } } xmlhttp.open("get","test1.txt",true); xmlhttp.send();
异步false
xmlhttp.open("get","test1.txt",false); // 不推荐使用 xmlhttp.open("get","test1.txt",false); xmlhttp.send(); document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext;
服务器响应
属性 | 描述 |
---|---|
responsetext |
获取字符串式的响应数据 |
responsexml |
获取xml式的响应数据 |
responsetext属性:
document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext;
xmldoc=xmlhttp.responsexml; txt=""; x=xmldoc.getelementsbytagname("artist"); for (i=0;i<x.length;i++) { txt=txt + x[i].childnodes[0].nodevalue + "<br />"; } document.getelementbyid("mydiv").innerhtml=txt;
onreadystatechange
事件
readystate
被改变时,会触发 onreadystatechange
事件,readystate
属性存有xmlhttprequest
的信息。
onreadystatechange 存储函数 readystate 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 status 200: "ok" 404: 未找到页面
xmlhttp.onreadystatechange=function() { if (xmlhttp.readystate==4 && xmlhttp.status==200) { document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext; } }
function showhint(str) { var xmlhttp; if (str.length==0) { document.getelementbyid("txthint").innerhtml=""; return; } if (window.xmlhttprequest) {// code for ie7+, firefox, chrome, opera, safari xmlhttp=new xmlhttprequest(); } else {// code for ie6, ie5 xmlhttp=new activexobject("microsoft.xmlhttp"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readystate==4 && xmlhttp.status==200) { document.getelementbyid("txthint").innerhtml=xmlhttp.responsetext; } } xmlhttp.open("get","gethint.asp?q="+str,true); xmlhttp.send(); }
asp.net
asp.net 是一个开发框架
tcp/ip 教程
xmlhttp
abort
取消当前请求,语法:
oxmlhttprequest.abort();
getallresponseheaders
获取响应的所有http头
语法:
strvalue = oxmlhttprequest.getallresponseheaders();
var xmlhttp = new activexobject("msxml2.xmlhttp.3.0"); xmlhttp.open("get", "http://localhost/sample.xml", false); xmlhttp.send(); alert(xmlhttp.getallresponseheaders());
getresponseheader
:
从响应信息中获取指定的http头
语法:
strvalue = oxmlhttprequest.getresponseheader(bstrheader);
var xmlhttp = new activexobject("msxml2.xmlhttp.3.0"); xmlhttp.open("get", "http://localhost/sample.xml", false); xmlhttp.send(); alert(xmlhttp.getresponseheader("server"));
onreadystatechange
指定当readystate属性改变时的事件处理句柄
语法:
oxmlhttprequest.onreadystatechange = funcmyhandler;
介绍 json
一种轻量级的数据交换格式
一个对象以“{” 开始,“}” 结束
每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔
数组是值的有序集合
以“[”开始,“]”结束,值之间使用“,”分隔
ajax
获取文本内容 document.getelementbyid("username").value 通过xmlhttprequest请求,xml+http+request
请求
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> <script type="text/javascript"> function ajaxfunction(){ var xmlhttp; try{ xmlhttp=new xmlhttprequest(); } catch (e){ try{ xmlhttp=new activexobject("msxml2.xmlhttp"); } catch (e){ try{ xmlhttp=new activexobject("microsoft.xmlhttp"); } catch (e){} } } return xmlhttp; } //执行get请求 function get() { //1. 创建xmlhttprequest 对象 var request = ajaxfunction(); //2. 发送请求。 // request.open("get" ,"/demoservlet01" ,true ); request.open("get" ,"/demoservlet01?name=dashu&age=18" ,true ); request.send(); } //执行get请求 function get() { //创建xmlhttprequest 对象 var request = ajaxfunction(); //发送请求 request.open("get" ,"/demoservlet01?name=dashu&age=18" ,true ); //获取响应数据 request.onreadystatechange = function(){ if(request.readystate == 4 && request.status == 200){ //弹出响应的信息 alert(request.responsetext); } } request.send(); } </script> </head> <body> <h3><a href="" onclick="get()">使用ajax方式发送get请求</a></h3> </body> </html>
post
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> <script type="text/javascript"> //创建对象 function ajaxfunction(){ var xmlhttp; try{ xmlhttp=new xmlhttprequest(); } catch (e){ try{ xmlhttp=new activexobject("msxml2.xmlhttp"); } catch (e){ try{ xmlhttp=new activexobject("microsoft.xmlhttp"); } catch (e){} } } return xmlhttp; } function post() { //创建对象 var request = ajaxfunction(); //发送请求 request.open( "post", "/demoservlet01", true ); //获取服务器传送过来的数据 request.onreadystatechange=function(){ if(request.readystate==4 && request.status == 200){ alert("post:"+request.responsetext); } } request.setrequestheader("content-type","application/x-www-form-urlencoded"); //带数据过去 , 在send方法里面写表单数据。 request.send("name=dashucoding&age=19"); } </script> </head> <body> <h3> <a href="" onclick="post()">使用ajax方式发送post请求</a> </h3> </body> </html>
数据请求,创建对象:
校验用户名
dao
import java.sql.sqlexception; public interface userdao { /** * 用于检测用户名是否存在 */ boolean checkusername(string username) throws sqlexception; }
util:
public class jdbcutil02 { static combopooleddatasource datasource = null; static{ datasource = new combopooleddatasource(); } public static datasource getdatasource(){ return datasource; } /** * 获取连接对象 * @return * @throws sqlexception */ public static connection getconn() throws sqlexception{ return datasource.getconnection(); } /** * 释放资源 * @param conn * @param st * @param rs */ public static void release(connection conn , statement st , resultset rs){ closers(rs); closest(st); closeconn(conn); } public static void release(connection conn , statement st){ closest(st); closeconn(conn); } private static void closers(resultset rs){ try { if(rs != null){ rs.close(); } } catch (sqlexception e) { e.printstacktrace(); }finally{ rs = null; } } private static void closest(statement st){ try { if(st != null){ st.close(); } } catch (sqlexception e) { e.printstacktrace(); }finally{ st = null; } } private static void closeconn(connection conn){ try { if(conn != null){ conn.close(); } } catch (sqlexception e) { e.printstacktrace(); }finally{ conn = null; } } }
public class textutils { /** * 判断某一个字符串是否为空。 */ public static boolean isempty(charsequence s){ return s==null || s.length() == 0; } }
servlet
try{ request.setcharacterencoding("utf-8"); string name = request.getparameter("name"); userdao dao = new userdaoimpl(); boolean isexist = dao.checkusername(name); if(isexist){ response.getwriter().println(1);// 存在 }else{ response.getwriter().println(2); // 反之 } }catch(sqlexception e){ e.printstacktrace(); }
xxx.jsp <input type="text" name="name" id="name" onblur="checkusername()"><span id="span01"></span>
<script type="text/javascript"> function checkusername() { //获取输入框的值 var name = document.getelementbyid("name").value; //创建对象 var request = ajaxfunction(); //发送请求 request.open("post" ,"/checkusernameservlet" , true ); //注册状态,获取服务器传过来的数据 request.onreadystatechange = function(){ if(request.readystate == 4 && request.status == 200){ var data = request.responsetext; if(data == 1){ document.getelementbyid("span01").innerhtml = "<font color='red'>用户名已存在!</font>"; }else{ document.getelementbyid("span01").innerhtml = "<font color='green'>用户名可用!</font>"; } } } request.setrequestheader("content-type","application/x-www-form-urlencoded"); // 输入框发送name request.send("name="+name); } </script>
结言
好了,欢迎在留言区留言,与大家分享你的经验和心得。
感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。
达叔小生:往后余生,唯独有你
you and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞
上一篇: 一张你会看两遍以上的图