版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、案例& ajax一.案例i.生成訂單操作分析先看下訂單頁面:幣“F 訂,兩吊名樓價(jià)臨ns001THINKING JAVA99計(jì)K機(jī)兩吊名樓價(jià)臨ns001THINKING JAVA99計(jì)K機(jī)| , 精整用戶發(fā)編中心隊(duì)訂wweth觸人i RE6式;xx京燈1 ,&t! K迎色車跖UWTM中心W)道口良分析下訂單表需要那些字段id收貨人(receiverName)收貨地址(receiverAddress)收貨人 (receiverPhone)總計(jì)(totalPrice)分析下表之間的關(guān)系這里面涉及到三張表,分別是用戶表,訂單表,商品表他們之間的關(guān)系為用戶表和訂單表之間是一對多的關(guān)系 訂單表和商品表之
2、間是多對多的關(guān)系 if (window. XML Request) / code for all new browsersxml = new XML Request(); else if (window. ActiveXObject) / code for IE5 and IE6 xml = new ActiveXObject(Microsoft. XML );)return xml ;)設(shè)置回調(diào)函數(shù)(onreadystatechange)xml . onreadystatechange=function();目的是服務(wù)器端響應(yīng)完成后,瀏覽器端可以知道,并完成后續(xù)工作。open操作xml .
3、open( “GET,” /day/ajaxv ;設(shè)置訪問的資源路徑以及請求方式send操作xml .send(null);發(fā)送請求回調(diào)函數(shù)編寫在第二步的回調(diào)函數(shù)內(nèi)完成操作。3. XML Request 之 API 詳解Ajax 的核心是 JavaScript 對象 Xml Requesto 該對象在 Internet Explorer 5中首次引入,它是一種支持異步請求的技術(shù)。簡而言之, Xml Request使您可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng), 而不阻塞用戶。XML Request對象提供了對 協(xié)議的完全的訪問, 包括做出POST和HEAD請求以及普通的GET請求的
4、能力。XML Request可以同步或異步地返回Web服務(wù)器的響應(yīng),并且能夠以 文本或者一個(gè)DOM文檔的形式返回內(nèi)容。onreadystatechange 屬性當(dāng)XML Request對象的狀態(tài)改變時(shí)會調(diào)用的一個(gè)函數(shù).readyState 屬性對于XML Request對象,它有一性readyState,它有五個(gè)狀態(tài)0 創(chuàng)立 XML Request 又寸象.1當(dāng)open時(shí)2當(dāng)send時(shí)3響應(yīng)頭已經(jīng)返回,但響應(yīng)正文沒有完成,也就是響應(yīng)沒有完全完成.4響應(yīng)完成了一般情況下,在回調(diào)的函數(shù)中,我們都是判斷if(xml .readyState=4&xml .status=200)來接收服務(wù)器端響應(yīng)的信息
5、.status屬性由服務(wù)器返回的 狀態(tài)代碼,如200表示成功,而404表示Not Found錯(cuò)誤。當(dāng)readyState小于3的時(shí)候讀取這一屬性會導(dǎo)致一個(gè)異 常。responseText 屬性目前為止為服務(wù)器接收到的響應(yīng)體(不包括頭部),或者如果還沒有接收到數(shù) 據(jù)的話,就是空字符串。如果readyState小于3 ,這個(gè)屬性就是一個(gè)空字符串。當(dāng)readyState為,這個(gè)屬性返回目前已經(jīng)接收的響應(yīng)局部。如果readyState為4 ,這個(gè)屬 性保存了完整的響應(yīng)體。如果響應(yīng)包含了為響應(yīng)體指定字符編碼的頭部,就使用該編碼。否那么,假定使 用 Unicode UTF-80responseXML 屬性
6、 對請求的響應(yīng),解析為XML并作為Document對象返回。open方法初始化 請求參數(shù),例如URL和 方法,但是并不發(fā)送請求。xml .open(請求方式,url);請求方式:POST GET路徑:客戶端路徑格式/工程名/資源路徑如果是GET方式,想要向服務(wù)器發(fā)送請求,并且攜帶請求參數(shù),可以直接在 url后面連接。如果是POST方式,想要向服務(wù)器發(fā)送請求,并且攜帶請求參數(shù),我們需要在 send時(shí)傳遞參數(shù)send方法發(fā)送 請求,使用傳遞給open。方法的參數(shù),以及傳遞給該方法的可 選請求體。如果請求方式是post,并且要攜帶參數(shù),可以通過send的參數(shù)來傳遞setRequestHeader 方
7、法向一個(gè)翻開但未發(fā)送的請求設(shè)置或添加一個(gè) 請求。如果請求方式是POST,并且要攜帶參數(shù),需要設(shè)置一個(gè)請求頭.setRequestHeaderCCONTENT-TYPEYapplication/x-www-form- urlencoded);中文亂碼問題get請求需要在發(fā)送請求的時(shí)候?qū)χ形倪M(jìn)行編碼,如下:xml .open(M getH,11 $pageContext.request,contextPath/ajax2?username=H+encodellRI(document.getElementById( MusernameM ) . value);服務(wù)器端處理方式和之前request的處
8、理亂碼方式一樣.案例-驗(yàn)證用戶名是否重復(fù).案例-商品信息模糊查詢a.修改頁面(menu_search.jsp),在這個(gè)頁面的搜索欄添加ajax請求Search 給搜索框添加鍵盤彈起事件,發(fā)送ajax請求,將輸入的值出給后臺b.編寫后臺功能接受ajax發(fā)送過來的值查找數(shù)據(jù)庫(dao 使用 ColumnListHandler)生成響應(yīng)信息c.效果如下LonelySearchE3E3現(xiàn)球:的喜馬口 度平原的暖 牛雪人、 擁百世界上:前臺代碼模糊匹配function searchName(d)var xml ;if (window. XML Request) / code for all new br
9、owsersxml = new XML Request(); else if (window. ActiveXObject) / code for IE5 and IE6 xml = new ActiveXObject(Microsoft. XML );)回調(diào)函數(shù)xml . onreadystatechange=function()if(xml . readyState=4 & xml . status = 200)var data=xml . responseText;if(data!=null & data!=)var arr=data. split(/s*, s*/);var cDiv=
10、document. getElementByld (,zcontent,/);eDiv. innerHTML=;for(var i=0;iarr. length;i+) eDiv. innerHTML+= (/z+arri+/div”);eDiv. style, display=block”;/openxml , open (GET”, z/$ pageContext. request. contextPath /f indProductByName?name= +window. encodeURI(d. value);/sendxml , send ();)/放上去變色 為了展示效果好看 添
11、加顏色function changeColorl(d)d.style. backgroundColor=;)離開之后恢復(fù)原色function changeColor2(d)style. backgroundColor=/#999,/;將選中的值賦給文本框function setName(d)document. getElementByld (z,name,z). value=d. innerHTML;設(shè)置完值之后將div隱藏document. getElementById(content), style, display=none;)后臺代碼public void doGet ( Servle
12、tRequest request, ServletResponse response) thr ows ServletException, lOException response. setContentType (z,text/html; charset=utf-8,/);獲取參數(shù)String name = request. getParameter (,zname,z);name=new String (name. getBytes(iso8859-l),utf-8);if (name=null | | name. trim(). length () =0) return;調(diào)用 servi
13、ceProductService service=new ProductService();List names=null;try names = service, findProductByName(name); catch (SQLException e) printStackTrace ();)if(names!=null & names, size()0)String names = names. toString();response. getWriter(). write(names . substring(1, names . length ()-1);).json介紹與入門js
14、on介紹JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript ( Standard ECMA-262 3rd Edition - December 1999 )的一個(gè) 子集。JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家 族的習(xí)慣(包括 C, C+, C#z Java, JavaScript, Perl, Python 等)。這些特性 使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析 和生成(網(wǎng)絡(luò)傳輸速度)。json格式JSON結(jié)構(gòu)有兩種結(jié)構(gòu)json簡單說就是javascript中的對象和
15、數(shù)組,所以這兩種結(jié)構(gòu)就是對象和數(shù)組 兩種結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu)u對象:對象在js中表示為括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為key :value,key : value,.的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬 性,value為對應(yīng)的屬性值,所以很容易理解,取值方法為對象.key獲取屬 性值,這個(gè)屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。u數(shù)組:數(shù)組在js中是中括號1括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為java,javascript,vb,.,取值方式和所有語言中一樣,使用索引獲取,字 段值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。經(jīng)過對象、數(shù)組2種結(jié)構(gòu)就可以組合成復(fù)雜的數(shù)據(jù)結(jié)
16、構(gòu)了。.jsonlib插件介紹jsonlib 介紹Json-lib 是一個(gè) Java 類庫(官網(wǎng):)可以 實(shí)現(xiàn)如下功能:轉(zhuǎn)換 javabeans, maps, collections, java arrays 和 XML 成為 json 格式數(shù)據(jù)轉(zhuǎn)換json格式數(shù)據(jù)成為javabeans對象Json-lib需要的jar包c(diǎn)ommons-beanuti1s-1. 8. 3. jar commons-collections-3. 2. 1. jar commons-lang-2. 6. jar commons-logging-1. 1. 1. jar ezmorph-1. 0. 6. jar js
17、on-lib-2. 4-jdkl5. jarjsonlib 常用 api數(shù)組,Collection集合轉(zhuǎn)換成json數(shù)據(jù)使用JsonArray.fromObject(對象);Map z javaBean 轉(zhuǎn)換成 json 數(shù)據(jù)使用 JsonObject.fromObject(對象);如果不想讓javaBean中的數(shù)據(jù)出現(xiàn)在json中.JsonConfig jsonConfig = new JsonConfig();jsonConfig. setExcludes(new Stringprice);JSONObject jsonObject = JSONObject. fromObject(pl,
18、 jsonConfig);System. out., pri nt,l n (jsonOh ject.);注意表的設(shè)計(jì):在訂單表中添加一個(gè)用戶id,表示用戶和訂單的關(guān)系添加一張中間表,表示訂單和商品的關(guān)系中間表的字段訂單oid商品pid購買商品數(shù)量buynum商品小計(jì)littleprice創(chuàng)立表用戶表create table user(id int primary key AUTO_INCREMENT,username varchar (20),password varchar(20);訂單表(添加一個(gè)外鍵)create table orders (id varchar(50) primary
19、 key, receivername varchar (20), receiveraddress varchar (100), receiverphone varchar (20), totalprice double, user_id int);中間表(訂單項(xiàng)表orderitem) 如果服務(wù)器端返回的數(shù)據(jù)格式是json格式,那么我們在瀏覽器端得到數(shù)據(jù)時(shí) 需要使用eval函數(shù)將字符串轉(zhuǎn)換成json對象.var msg=xml .responseText;var obj=eval(msg);有的時(shí)候通過eval轉(zhuǎn)換時(shí),得不到一個(gè)json對象,這時(shí)做以下操作 var obj=eval( +msg+
20、 );8.案例-使用json來完成商品信息模糊查詢操作實(shí)現(xiàn)create table orderitem(oid varchar(50),pid varchar(50),buynum int,littleprice double,primary key(oid,pid);生成訂單的過程,先把收貨人信息及用戶id存入訂單表(receiver訂單id用戶id商品總價(jià))把購物車?yán)锏纳唐芳皵?shù)量放到訂單項(xiàng)表中(訂單id商品id購買數(shù)量小計(jì))最后修改商品表中的數(shù)量以上三個(gè)操作必須在一個(gè)事務(wù)控制范圍內(nèi)2.生成訂單操作實(shí)現(xiàn)保證用戶登錄編寫javabean(訂單bean,訂單項(xiàng)bean)訂單beanprivate
21、 String id;private String receiverName;private String receiverAddress;private String receiverPhone;private Double totalPrice;private User user;private List items;訂單項(xiàng)實(shí)體beanprivate Order order;private Product product;private Integer buyNum;private Double littlePrice;用戶實(shí)體:userprivate Integer id;private
22、 String username;private String password;訂單生成保證用戶登錄從cartjsp點(diǎn)擊結(jié)賬按鈕開始跳轉(zhuǎn)到orderjsp(取出購物車?yán)锩嫔唐沸畔⒓坝脩粜畔?還需自己錄入收貨信息)點(diǎn)擊提交訂單,發(fā)送請求到createOrderSevlet住要邏輯如下)Order order=new Order(): try (封裝收貨人信息及訂單總價(jià)BeanUtils. populate(order, request. getParameterMap(); catch (IllegalAccessException e) e. printStackTrace (); catc
23、h (InvocationTargetException e) e. printStackTrace ();手動(dòng)設(shè)置訂單idorder. setId(UUIDUtils. getldO);order.setUser (User)request. getSession(). getAttribute(user);設(shè)置商品集合lnst list=new ArrayList();(Map) request. getSession (). getAtt(Map) request. getSession (). getAttMap cart ribute;for (Product p : cart. k
24、eySet () list. add (new Orderitem (order, p, cart, get (p), p. getPrice ()*cart. get (p);order, setitems (list);注意:事務(wù)然后調(diào)用0rdeservice添加訂單public void addOrder(Order order) try DataSourceUtils. startTransaction();添加訂單orderDao orderDao = new orderDao();orderDao. addOrder(order);添加訂單項(xiàng)OrderltemDao oiDao=n
25、ew OrderltemDao();oiDao. addOrderltem(order);修改商品表ProductDao pDao=new ProductDaoO;pDao. updateProductPnum(order); catch (SQLException e) e. printStackTrace ();try (DataSourceUtils. rollback(); catch (SQLException el) el.printStackTrace();) finally(try (DataSourceUtils. commitAndRelease(); catch (SQL
26、Exception e) e. printStackTrace ();添加訂單(orderDao)public void addOrder(Order order) throws SQLException QueryRunner runner=new QueryRunner();String sql=insert into orders values (?,?,?,?,?,?);;runner, update(DataSourceUtils. getConnection(), sql, order. getld(),order. getReceiverName (), order. getRe
27、ceiverAddress(),order.getReceiverPhone (), order. getTotalPrice(),order. getUser(). getldO);)添加訂單項(xiàng)(orderltemDao)public void addOrderltem(Order order) throws SQLException QueryRunner runner=new QueryRunner();String sql=insert into orderitem values(?,?,?,?);;Object params=new Objectorder, getltems().
28、size()4;for (int i = 0; i order, getltems(). size() ; i+) Orderitem item = order.getltems(). get(i);paramsi 0=item. getOrder(). getldO ;paramsi l=item. getProduct (). getTdO ;paramsi 2=item. getBuyNumO ;paramsi3=item. getLittlePrice();)runner, batch(DataSourceUtils. getConnection(), sql, params);)修改商品數(shù)量(productDao)public void updateProductPnum(Order order) throws SQLException 修改當(dāng)前訂單里的所含商品的數(shù)量QueryRunner runner =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年黑龍江省衛(wèi)生健康委員會直屬事業(yè)單位招聘125人備考題庫及一套完整答案詳解
- 2026年臺州溫嶺市第一人民醫(yī)院招聘派遣員工5人備考考試試題及答案解析
- 2026安徽蚌埠市禹會區(qū)招聘村級后備干部招聘5人備考題庫及一套參考答案詳解
- 2025廣東中山大學(xué)孫逸仙紀(jì)念醫(yī)院消毒供應(yīng)中心助理技師招聘2人備考題庫及參考答案詳解
- 2026黑龍江齊齊哈爾市拜泉縣招聘公益性崗位人員60人考試參考試題及答案解析
- 2026新疆阿克蘇人才發(fā)展集團(tuán)有限責(zé)任公司面向社會招聘合同制專任教師260人備考題庫及答案詳解(新)
- 2026廣東深圳羅湖區(qū)新華外國語學(xué)招聘初中英語教師考試參考試題及答案解析
- 2026四川天府云數(shù)據(jù)科技有限責(zé)任公司招聘1人備考題庫及一套答案詳解
- 2026北京海淀區(qū)清華附中學(xué)院路學(xué)校招聘備考考試試題及答案解析
- 2026上半年安徽事業(yè)單位聯(lián)考臨泉縣招聘89人備考考試題庫及答案解析
- 2025年馬口鐵包裝容器行業(yè)當(dāng)前市場規(guī)模及未來五到十年發(fā)展趨勢報(bào)告
- 焊工獎(jiǎng)罰管理辦法
- 2024版電網(wǎng)典型設(shè)計(jì)10kV配電站房分冊
- 《SPSS與AMOS在中介效應(yīng)與調(diào)節(jié)效應(yīng)分析中的應(yīng)用》
- 家屬院停車管理暫行辦法
- 錫圓電子科技有限公司高端半導(dǎo)體封測項(xiàng)目環(huán)評資料環(huán)境影響
- T/CGAS 031-2024城鎮(zhèn)燃?xì)饧映艏夹g(shù)要求
- T/CGAS 026.2-2023瓶裝液化石油氣管理規(guī)范第2部分:平臺建設(shè)
- 《新能源汽車電力電子技術(shù)》電子教案-新能源汽車電力電子技術(shù).第一版.電子教案
- 金屬非金屬礦山開采方法手冊
- GB/T 45356-2025無壓埋地排污、排水用聚丙烯(PP)管道系統(tǒng)
評論
0/150
提交評論