ajax

js中的事件。

js對瀏覽器,鼠標(biāo)發(fā)生的一些列動作的監(jiān)聽。

比如鼠標(biāo)的監(jiān)聽事件 onclick,onmouseout,onmouseover

還有對鍵盤的監(jiān)聽 onkeyDown()

表單事件 onblur? onfocuse? onchange?

層級聯(lián)動

版本1

window.onload = function() {

var s1 = document.getElementById("s1");

var s2 = document.getElementById("s2");

//表單項中value的值發(fā)生改變的時候觸發(fā)onchange事件

// 實現(xiàn)層級聯(lián)動,1先要監(jiān)聽第一個select切換的動作 -->

s1.onchange = function() {

//2獲取當(dāng)前被選中的option是哪一個

//select標(biāo)簽不帶有value屬性,那在js代碼中通過Vlaue屬性獲取到的是select當(dāng)前被選中的option的value的值

var s1value = s1.value

if (s1value == 1) {

//選中北京

//以下代碼簡單,但是對標(biāo)簽比較復(fù)雜的情況下,代碼維護(hù)很麻煩

s2.innerHTML = "東城西城"

} else if (s1value == 2) {

//選中上海

s2.innerHTML = "寶山浦東"

} else if (s1value == 3) {

//選中河南

s2.innerHTML = "開封鄭州"

}

}

}

版本2在版本1的基礎(chǔ)上對option的添加 進(jìn)行了修改,改為add(opstion)的方式

window.onload = function() {

var s1 = document.getElementById("s1");

var s2 = document.getElementById("s2");

//表單項中value的值發(fā)生改變的時候觸發(fā)onchange事件

// 實現(xiàn)層級聯(lián)動,1先要監(jiān)聽第一個select切換的動作 -->

s1.onchange = function() {

//2獲取當(dāng)前被選中的option是哪一個

//select標(biāo)簽不帶有value屬性,那在js代碼中通過Vlaue屬性獲取到的是select當(dāng)前被選中的option的value的值

var s1value = s1.value

//需要清空s2里的所有option,避免在之前的基礎(chǔ)上追加

//s2.innerHTML=""

//length表示內(nèi)部option的個數(shù),長度為0就表示沒有一個option就是清空

s2.length = 0

if (s1value == 1) {

//選中北京

//以下代碼簡單,但是對標(biāo)簽比較復(fù)雜的情況下,代碼維護(hù)很麻煩

//s2.innerHTML = "東城西城"

//add方法用于向select中添加option

//option支持直接new 一個option對象

s2.add(new Option("東城", 1))

s2.add(new Option("西城", 2))

} else if (s1value == 2) {

//選中上海

//s2.innerHTML = "寶山浦東"

s2.add(new Option("寶山", 1))

s2.add(new Option("浦東", 2))

} else if (s1value == 3) {

//選中河南

//s2.innerHTML = "開封鄭州"

s2.add(new Option("開封", 1))

s2.add(new Option("鄭州", 2))

}

}

}

版本3在版本2的基礎(chǔ)上進(jìn)行數(shù)據(jù)上的優(yōu)化,城市信息如果全部書寫在js代碼中option的組裝移動到后臺。

實現(xiàn)基本思路:

1在捕獲到當(dāng)前被選中的省的value之后

2把Value通過ajax傳到一個servlet

3servlet獲取到value之后根據(jù)value查找對應(yīng)的市進(jìn)行返回

4ajax獲取服務(wù)器返回的數(shù)據(jù)進(jìn)行添加option

前端中的html

window.onload = function() {

var s1 = document.getElementById("s1");

var s2 = document.getElementById("s2");

//表單項中value的值發(fā)生改變的時候觸發(fā)onchange事件

// 實現(xiàn)層級聯(lián)動,1先要監(jiān)聽第一個select切換的動作 -->

s1.onchange = function() {

//2獲取當(dāng)前被選中的option是哪一個

//select標(biāo)簽不帶有value屬性,那在js代碼中通過Vlaue屬性獲取到的是select當(dāng)前被選中的option的value的值

var s1value = s1.value

//需要清空s2里的所有option,避免在之前的基礎(chǔ)上追加

//s2.innerHTML=""

//length表示內(nèi)部option的個數(shù),長度為0就表示沒有一個option就是清空

s2.length = 0

//把s1value發(fā)送給后臺的servlet

var xhr = new XMLHttpRequest();

xhr.open("GET", "getCity?s1value=" + s1value, true);

xhr.send()

xhr.onreadystatechange = function() {

if (xhr.readyState == 4) {

if (xhr.status == 200) {

//不同的平臺和不同的語言之間要做數(shù)據(jù)的傳遞

//服務(wù)器返回的是一個json字符串,我們需要對他解析,拿到我們想要的數(shù)據(jù)

var jsonStr = xhr.responseText

//js中解析json很簡單,js可以直接把json字符串轉(zhuǎn)成一個js中的對象

//此處獲取到了一個js中數(shù)組,封裝了第二個select所需要的數(shù)據(jù)

var obj = JSON.parse(jsonStr)

for (i = 0; i < obj.length; i++) {

//循環(huán)向城市的選項中添加服務(wù)器返回的數(shù)據(jù)對應(yīng)的option

s2.add(new Option(obj[i].text, obj[i].value))

}

}

}

}

}

}

提供對應(yīng)的servlet

1獲取前端傳遞的省的標(biāo)識

2根據(jù)省組裝對應(yīng)的json數(shù)據(jù)

Gson gson = new Gson();

String data = gson.toJson(cities);

3進(jìn)行數(shù)據(jù)通過response輸出到客戶端

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 獲取前端傳遞過來的選中的省的值

String s1 = req.getParameter("s1value");

int s1I = Integer.valueOf(s1);

// 根據(jù)省組裝市

// 如果沒有數(shù)據(jù)庫,我們之前在js中的判斷,比如(if (s1==1){})移動到后臺的servlet中進(jìn)行判斷

List cities = new ArrayList();

if (s1I == 1) {

cities.add(new City(1, "東城"));

cities.add(new City(2, "西城"));

} else if (s1I == 2) {

cities.add(new City(1, "寶山"));

cities.add(new City(2, "浦東"));

} else if (s1I == 3) {

cities.add(new City(1, "開封"));

cities.add(new City(2, "鄭州"));

cities.add(new City(3, "焦作"));

}

? ? ? ? ? ? ? Gson gson = new Gson();

String data = gson.toJson(cities);

System.out.println(data);

resp.setCharacterEncoding("utf-8");

resp.getWriter().print(data);

}

版本4

創(chuàng)建表,把省和市保存到數(shù)據(jù)庫中,并且根據(jù)省查詢市的功能由數(shù)據(jù)庫完成

實現(xiàn)

1準(zhǔn)備mysql操作相關(guān)動作(jar,utils,xml配置,pojo)

2創(chuàng)建Dao類進(jìn)行sql執(zhí)行代碼書寫

3為表中插入測試數(shù)據(jù)

4servlet中調(diào)用dao中的方法進(jìn)行執(zhí)行

版本5

一進(jìn)入頁面,所有的省也是從數(shù)據(jù)庫查詢進(jìn)行顯示,而不是直接寫死在html中

實現(xiàn)方式1一進(jìn)入city.html頁面就直接發(fā)起一個ajax請求,請求所有的省

版本5.1

除了可以使用ajax在一進(jìn)入頁面就訪問后臺獲取數(shù)據(jù)以外,還可以直接使用servlet+jsp的方式

提供一個servlet:進(jìn)入servlet以后插敘數(shù)據(jù)庫,把數(shù)據(jù)保存到request作用域,轉(zhuǎn)發(fā)到j(luò)sp

jsp(jstl+el)中:foreach循環(huán)生成option

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一)jQuery常用AJAX-API 目的:簡化客戶端與服務(wù)端進(jìn)行局部刷新的異步通訊 1)取得服務(wù)端當(dāng)前時間 簡單...
    奮斗的老王閱讀 829評論 0 51
  • 效果和百度差不多 ,由于是個demo我就沒有使用數(shù)據(jù)庫,真正的做法應(yīng)該是在數(shù)據(jù)庫有一張關(guān)鍵字表。當(dāng)用戶輸入關(guān)...
    城東那個小丑閱讀 1,837評論 3 11
  • 一、介紹 1、什么是ajaxAsynchronousJavascriptAndXml利用javascript和xm...
    hello大象閱讀 358評論 0 0
  • 屬于簡易版,比較適合沒有后臺基礎(chǔ)的初學(xué)者入門,使用Ajax響應(yīng)php對mysql數(shù)據(jù)庫進(jìn)行操作,將網(wǎng)站搭建在xam...
    dovlie閱讀 1,106評論 0 5
  • 歲月是一棵枝干縱橫的大樹,而生命是其中飛進(jìn)飛出的小鳥。即使有一天,你遭遇了人生的冷風(fēng)凍雨,你的心已經(jīng)不堪承受,...
    慧鎂閱讀 200評論 0 1

友情鏈接更多精彩內(nèi)容