JavaWeb學習之Ajax


Ajax技術

1、同步與異步

      同步現象:客戶端發送請求到服務器端,當服務器返回響應之前,客戶端都處於等待、卡死的狀態。

      異步現象:客戶端發送請求到服務器端,無論服務器是否返回響應,客戶端都可以隨意做其他事情,不會卡死。

2、Ajax運行原理

     頁面發起請求,會將請求發送給瀏覽器內核中的Ajax引擎,Ajax引擎會提交請求到服務器端,在這段時間里,客戶端可以進行任意操作,知道服務器端將數據返回給Ajax引擎后,會觸發你設置的事件,從而執行自定義的js邏輯代碼完成某種頁面的功能。

js原生的Ajax技術

js原生的Ajax其實就是圍繞瀏覽器內內置的Ajax引擎對象進行學習的,要使用js原生的Ajax完成異步操作,有以下幾個步驟:

1)創建Ajax引擎對象

2)為Ajax引擎對象綁定監聽(監聽服務器已將數據響應給引擎)

3)綁定提交地址

4)發送請求

5)接收響應數據

如果是Post方式提交,需要在發送請求之前設置一個頭

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

注:所有的異步訪問都是Ajax引擎

Json數據格式

json是一種與語言無關的數據交換格式。作用就是:使用Ajax進行前后台的數據交換、移動端與服務端的數據交換

Json的格式與解析

1)對象格式:{“key1”:obj,"key2":obj,"key3":obj....}

2)數組/集合格式:[obj,obj,obj...]

例如:user對象,用Json數據格式表示為:{“username”:“zhangsan”,"age":18,"address":"淄博"}

          List<Product>,用Json數據格式表示為:[{"pid":10,"pname":"小米4C"},{},{}...]

注:1、對象格式和數組格式可以互相嵌套的

        2、json的key是字符串,json的value是object

json的解析:json是js的原生內容,也就意味着js可以直接取出json對象中的數據

class Person{
	  String firstname = "張";
	  String lastname = "三豐";
	  Integer age = 100;
	 }
  	   案例一
	   {key:value,key:value}
  	   {"firstname":"張","lastname":"三豐","age":100}
	  案例二
	   [{key:value,key:value},{key:value,key:value}]
	   [{"firstname":"李","lastname":"四","age":18},{},{}]
	   案例三
	  {
	    "param":[{key:value,key:value},{key:value,key:value}]
	  }
	    "java0131":[{"firstname":"李","lastname":"四","age":18},{},{}]
	   案例四
	  {
	     "param1":[{key:value,key:value},{key:value,key:value}],
	     "param2":[{key:value,key:value},{key:value,key:value}],
	     "param3":[{key:value,key:value},{key:value,key:value}]
	   }
	   案例五
	   {
	     "param1":"value1",
	     "param2":{},
	     "param3":[{key:value,key:value},{key:value,key:value}]
	    }

package web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JqueryAjax extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// post方式提交的時候,request獲取的數據不會有中文亂碼的問題
		// get方式提交的時候,request獲取的數據會有中文亂碼的問題
		// name = new String(name.getBytes("ISO8859-1"), "UTF-8");
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println(name + "..." + age);
		// java只能返回一個Json格式的字符串
		//response中文亂碼該怎么解決還怎么解決
		response.getWriter().write("{\"name\":\"" + name + "\",\"age\":" + age + "}");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

Json轉換插件

java的對象或集合轉成json形式字符串

json的轉換插件是通過java的一些工具,直接將java對象或集合轉換成json字符串。

常用的json轉換工具有如下幾種:

1)jsonlib

2)Gson:google

3)fastjson:阿里巴巴

Jquery的Ajax技術

Jquery是一個優秀的js框架,自然對js原生的Ajax進行了封裝,封裝后的Ajax在操作方法上更簡潔,功能更強大,與Ajax操作相關的jQuery方法有如下幾種,但是開發中經常使用的有三種

1、$.get(url,[data],[callback],[type])

2、$.post(url,[data],[callback],[type])

      url:代表的請求的服務器端的地址

      data:代表的請求服務器端的數據(可以是key=value形式,也可以是json格式)

      callback:代表的服務器端成功響應所觸發的函數(只有正常成功返回才執行)

      type:表示服務器端返回的數據類型(jQuery會根據指定的類型自動轉換),常用的返回類型:text、json、html等

3、$.ajax({option1:value1,option2:value2......});

      常用的option如下:

      async:是否異步,默認是true代表異步

      data:發送到服務器的參數,建議使用json格式

      dataType:服務器端返回的數據類型,常用的text和json

      success:成功響應執行的函數,對應的類型是function類型

      type:請求方式,POST/GET

      url:請求服務器端的地址

<%@ 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" src="jquery.min.js"></script>
<script type="text/javascript">
	function fn() {
		$.get(
		//url地址
		"/web13/JqueryAjax",
		//data數據
		{
			"name" : "小紅",
			"age" : 18
		},
		//回調函數
		function(data) {
			alert(data.name)
		},
		//數據格式
		"json"

		);
	}
	function fn1() {
		$.get(
		//url地址
		"/web13/JqueryAjax",
		//data數據
		{
			"name" : "小紅",
			"age" : 18
		},
		//回調函數
		function(data) {
			alert(data.name)
		},
		//數據格式
		"json"

		);
	}
	function fn2() {
		$.ajax({
			url : "/web13/JqueryAjax",
			async : true,
			type : "post",
			data : {
				"name" : "小紅",
				"age" : 18
			},
			success : function(data) {
				alert(data.name);
			},
			error : function() {
				alert("請求無效");
			},
			dataType : "json"
		});
	}
</script>
</head>
<body>
	<input type="button" value="GET方式異步請求服務器" onclick="fn()">
	<input type="button" value="POST方式同步請求服務器" onclick="fn1()">
	<input type="button" value="ajax請求服務器" onclick="fn2()">

</body>
</html>

 

javascript   jquery 用法
jquery需要引入一個js文件 並且這個js文件是在所有js代碼之前


找標簽:
	js:  document.getElement...   dom對象
		document.getElementById("name");
	jquery: $(選擇器)               jquery對象
		$("#name");
jquery對象和js對象轉換
	jquery=》js   
	$('.ddd')  => $('.ddd').get(0) || $('.ddd')[0]
	js=》jquery   var dom = document.getElementById('ddd')
	$(dom)
操作內容
	js:   dom代表js對象  dom=document.getElementById("name");
		表單  :dom.value 
		非表單:dom.innerHTML
	jquery: $ 代表jquery對象  $=$("name");
		表單: $.val();   $.val('修改之后的值');
		非表單: $.html();   $.html('修改之后的值');   $.text();
操作屬性;
	js:
		dom.setAttribute(屬性名,屬性值);
		dom.getAttribute(屬性名);
	jquery
		$.attr(屬性名,屬性值);
		$.attr(屬性名);
		$.attr({屬性名:屬性值 , 屬性名:屬性值 });
操作樣式
	js:
		dom.style.樣式 
 	jquery:
		$.css(屬性名,屬性值);
		$.css(屬性名);
事件:
	js:  dom.addListeneradfalsdujfaskdjf
		dom.onclick=function(){
		
		}
	jquery:
		$.click(function(){
		
		})

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM