JavaWeb開發之使用jQuery與Ajax實現動態聯級菜單效果_java

來源:互聯網
上載者:User

寫在前面,在筆者完成這個demo的時候,筆者發現現在大家已經不用Ajax來完成聯級菜單了,實際上筆者這個demo也並不是為了完成這個,筆者主要的學習方向是JavaWeb背景商務邏輯開發。但是做後台呢還是需要對前端有所瞭解,尤其是像Ajax這種非同步提交資料的技術需要瞭解並掌握。所以這裡筆者這裡用了一個聯級菜單來練習Ajax非同步提交,當然後續還會寫幾個非同步提交表單的demo。

筆者的後台是用的spring+SpringMVC的架構,這裡不對這部分進行解釋,重點在jQuery和Ajax。

第一,下載jquery.js這個資源

Jquery官網連結

第二,將下載好的jquery.js匯入項目中

在javaweb項目中,直接放在 WebContent 中即可(也可以建立自己的檔案夾,但不要放在WEB-INF檔案中)

第三,開始編寫代碼

建立一個JSP檔案

代碼如下

<%@page import="java.util.Map"%><%@page import="java.util.List"%><%@ 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>Ajax Test</title></head><body><!--這是從後台傳入前端的request中擷取資料的代碼,與主題Ajax可以脫離,不必過多關注--><%List<Map<String,Object>> listMap = (List<Map<String,Object>>)request.getAttribute("list"); %><select id="class" onchange="getStudent(this.value)"><option value="-1">請選擇班級</option><%for(int i = 0; i < listMap.size(); i++){Map<String,Object> map = listMap.get(i);%><option><%=map.get("class").toString() %></option><%} %><!--先選擇班級,然後第二個菜單選項會根據選擇的內容使用Ajax非同步同步後台資料庫的資料,從而設定第二個菜單的選項--></select><!--第二個菜單,根據選擇的班級確定姓名--><select id="name"><option>請先選擇班級</option></select></body><!--匯入jquery資源--><script type="text/javascript" src="jquery/jquery-3.1.1.min.js"></script><!--使用jquery中的ajax對介面進行非同步同步操作--><script>//jquery標準文法$(document).ready(function(){//監聽id為class的select控制項的改變動作,當這個控制項所選中的控制項改變時會出發這個function$("#class").change(function(){//調用jquery中的ajax$.ajax({//設定提交方式,主要是"GET"和"POST"type:"POST",//設定提交的url,這裡只能選擇本地的,如果需要調用其他域的資源,請google解決跨域問題url:"ajax.html?className="+$("#class").val(),//設定後台返回的格式,一般都是直接使用json,這一句不能少,否則當後台返回資料時,不會調用success方法dataType:"json",//當後台成功返回資料時調用該方法,data參數表示被jquery中的ajax格式化的json資料(實際上在非jquery的ajax中需要我們手動格式化,純JS的方法我也寫在了注釋裡面。jquery中格式json資料的方法是parse)success:function(data){//清空id為name的select控制項$("#name").empty();//給id為那麼的select控制項添加一個選項$("#name").append("<option>請選擇姓名</option>");//迴圈遍曆整個data(JSON資料),並給id為name的select控制項添加option選項$.each(data,function(i,n){$("#name").append("<option>"+data[i].name+"</option>");});},//當返回資料不成功時的操作error:function(jqXHR,XMLResponse){alert(arguments[1]);alert(XMLResponse.responseText);alert("發生錯誤:"+jqXHR.status);}});});});</script><!--不用Jquery庫的提交方式(這是使用純JS代碼提交,實際上很少使用了,但是可以用來理解ajax)<script type="text/javascript">//這裡實際上需要在select控制項中增加一個onchange來調用這個方法,然後會自動將選中的值存放於這個classname變數中function getStudent(className){if(className!="-1"){//使用XMLHttpRequest方法,實際上在上面的jquery中也是用的這個方法,只不過已經給我們封裝好了var request = new XMLHttpRequest();//使用open方法填寫參數,最後一個true表示使用使用非同步提交,可以省略,預設值就是truerequest.open("POST","ajax.html?className="+className,true);//發送ajax請求request.send();//監聽請求的狀態,主要有0 1 2 3 4 這幾種,但是一邊只會監聽2 3 4 ,其中4表示成功request.onreadystatechange = function(){//判斷只有當請求成功時才進行下一步if(request.readyState===4){//判斷只有當網頁的返回碼為200 OK時才進行下一步if(request.status===200){//使用JSON.parse方法格式化返回的json資料var data = JSON.parse(request.responseText);//遍曆for(var i = 0; i < document.getElementById("name").length; i++){document.getElementById("name").remove(document.getElementById("name").options[i]);}document.getElementById("name").add(new Option(data[0].name));}}}}}</script>--></html>

第四,最後實現的效果圖

以上所述是小編給大家介紹的JavaWeb開發之使用jQuery與Ajax實現動態聯級菜單效果,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.