本文主要介紹如何通過(guò)使用Ajax實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)獲取名字的功能。
三級(jí)聯(lián)動(dòng)是指一個(gè)由三個(gè)下拉菜單組成的組件,在選擇第一級(jí)菜單的選項(xiàng)后,第二級(jí)菜單的選項(xiàng)會(huì)根據(jù)第一級(jí)菜單的選項(xiàng)動(dòng)態(tài)加載,并在選擇第二級(jí)菜單的選項(xiàng)后,第三級(jí)菜單的選項(xiàng)會(huì)根據(jù)第二級(jí)菜單的選項(xiàng)動(dòng)態(tài)加載。
例如,假設(shè)我們要實(shí)現(xiàn)一個(gè)三級(jí)聯(lián)動(dòng)獲取名字的功能,第一級(jí)菜單是選擇性別(男、女),第二級(jí)菜單是選擇國(guó)家/地區(qū)(中國(guó)、美國(guó)),第三級(jí)菜單是選擇名字(根據(jù)性別和國(guó)家/地區(qū)的不同有不同的名字選項(xiàng))。
下面是實(shí)現(xiàn)該功能的步驟:
步驟1:創(chuàng)建一個(gè)HTML頁(yè)面,包含一個(gè)select元素用于選擇性別、一個(gè)select元素用于選擇國(guó)家/地區(qū)、一個(gè)select元素用于顯示名字。
<html> <body> <select id="gender"> <option value="male">男</option> <option value="female">女</option> </select> <select id="country"> <option value="china">中國(guó)</option> <option value="usa">美國(guó)</option> </select> <select id="name"></select> </body> </html>
步驟2:創(chuàng)建一個(gè)JavaScript函數(shù),用于從服務(wù)器獲取名字?jǐn)?shù)據(jù)。
function getNames(gender, country) { // 創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHttpRequest(); // 定義請(qǐng)求的方法、URL以及是否異步 xhr.open("GET", "getNames.php?gender=" + gender + "&country=" + country, true); // 注冊(cè)回調(diào)函數(shù),處理響應(yīng)結(jié)果 xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { var names = JSON.parse(xhr.responseText); updateNames(names); } else { console.log("獲取名字失敗"); } } }; // 發(fā)送請(qǐng)求 xhr.send(); }
步驟3:創(chuàng)建另一個(gè)JavaScript函數(shù),用于在第三級(jí)菜單中更新名字選項(xiàng)。
function updateNames(names) { var nameSelect = document.getElementById("name"); // 清空原有選項(xiàng) while (nameSelect.firstChild) { nameSelect.removeChild(nameSelect.firstChild); } // 添加新的選項(xiàng) for (var i = 0; i< names.length; i++) { var option = document.createElement("option"); option.textContent = names[i]; nameSelect.appendChild(option); } }
步驟4:在頁(yè)面加載完成時(shí),注冊(cè)事件處理函數(shù),當(dāng)選擇性別和國(guó)家/地區(qū)的選項(xiàng)發(fā)生變化時(shí)調(diào)用getNames函數(shù)。
window.onload = function() { var genderSelect = document.getElementById("gender"); var countrySelect = document.getElementById("country"); genderSelect.addEventListener("change", function() { var gender = genderSelect.options[genderSelect.selectedIndex].value; var country = countrySelect.options[countrySelect.selectedIndex].value; getNames(gender, country); }); countrySelect.addEventListener("change", function() { var gender = genderSelect.options[genderSelect.selectedIndex].value; var country = countrySelect.options[countrySelect.selectedIndex].value; getNames(gender, country); }); };
通過(guò)以上步驟,當(dāng)選擇性別和國(guó)家/地區(qū)的選項(xiàng)發(fā)生變化時(shí),getNames函數(shù)將被調(diào)用,并向服務(wù)器發(fā)送請(qǐng)求獲取名字?jǐn)?shù)據(jù),然后將數(shù)據(jù)更新到第三級(jí)菜單中。
綜上所述,我們可以通過(guò)使用Ajax實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)獲取名字的功能。在選擇性別和國(guó)家/地區(qū)的選項(xiàng)后,通過(guò)發(fā)送Ajax請(qǐng)求將對(duì)應(yīng)的名字?jǐn)?shù)據(jù)從服務(wù)器獲取,并將數(shù)據(jù)動(dòng)態(tài)更新到下拉菜單中。