第88節:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON

標題圖

第88節:Java中的Ajax和Jqueryjavascript

ajax是什麼?有什麼用?原理,怎麼用?html

ajax是asynchronous javascript and xml(異步javascript和xml),是指一種建立交互式網頁應用的網頁開發技術。java

ajax

如用戶註冊,輸入的用戶名,提示已經被註冊了。node

AJAXajax

Asynchronous JavaScript and XMLsql

ajax是一種不用從新加載整個網頁的狀況下,可以更新部分網頁的技術。數組

什麼是ajax?bash

是 異步 JavaScript 和 XML,是一種用於快速動態網頁的技術,可以在後臺與服務器進行少許的數據交換,就能夠實現網頁的異步更新了,就不用從新加載整個網頁,讓部分須要進行更新的內容進行更新了。服務器

AJAX 實例app

<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 對象

XMLHttpRequestAJAX 的基礎 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的狀況:

  1. 沒法使用緩衝文件
  2. 向服務器發送大量數據
  3. 發送未知字符

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>
複製代碼

結構

數據請求,建立對象:

效果

校驗用戶名

建立對象

jar

c3p0

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後帥氣小夥,良好的開發習慣;獨立思考的能力;主動而且善於溝通 簡書博客: 達叔小生 www.jianshu.com/u/c785ece60…

結語

  • 下面我將繼續對 其餘知識 深刻講解 ,有興趣能夠繼續關注
  • 小禮物走一走 or 點贊
相關文章
相關標籤/搜索