SlideShare ist ein Scribd-Unternehmen logo
1 von 104
Downloaden Sie, um offline zu lesen
AJAX   的  client/server   溝通機制探究 馮彥文 隨想行動科技
講師介紹 ,[object Object],[object Object],[object Object],[object Object],[object Object]
這個故事 ,  就從兩個技術人在一次研討會中的偶然相遇開始…
傑克 :   Hi  珍妮佛 , 你知道這個  session  最主要是講 ?
內容主題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
我們的目標 ,[object Object],[object Object],[object Object],[object Object]
我們的目標 ,[object Object],[object Object],[object Object],[object Object]
What We Will Focus on Here Browser Compatibility,   Cross-Domains, Java Data Marshalling,   JSON , JSON-RPC,   DOJO,   DWR,  GWT,   iframe ,   Prototype,   Timeout & Error Handling,  Reverse AJAX,  History & Bookmarks,   scriptTag ,   Web Framework Integration,  XHR,  XML
AJAX  非同步傳輸 1:35
珍妮佛 :   什麼是  AJAX?  什麼又是非同步傳輸 ?
AJAX ,[object Object],[object Object],[object Object],[object Object],XHTML&CSS DOM JavaScript XMLHttpRequest AJAX = DHTML + XHR
Classic Web Applications From: http://adaptivepath.com/publications/essays/archives/000385.php
AJAX Web Applications From: http://adaptivepath.com/publications/essays/archives/000385.php
傑克 :   那我該如何利用  AJAX  存取遠端網站資料呢 ?
XHR(XMLHttpRequest) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XHR ,[object Object],//  建立  XHR request = new XMLHttpRequest(); //  設定回呼函式 request. onreadystatechange =handleResponse; //  開啟連結 request. open ("GET","http://abc.com",true); //  傳送資料 request. send (null);
XHR ,[object Object],function handleResponse () { //  檢查  XHR  狀態 if(request. readyState  == 4){ //  檢查  http  狀態 if(request. status  == 200){ //  讀取回傳  XML  資料 var doc = request. responseXML ; //  取得網頁上需被更新的  node  位置 var node = document. getElementById (“resp"); //  設定該  node  的內容 node. innerHTML  = doc.documentElement.childNodes[0].nodeValue; } } }
DEMO: Hello World ,[object Object]
Tips & Tricks about XHR 1:40
珍妮佛 :   傑克 ,  這真是太神奇了 ,  但傳輸的資料一定要是  XML  格式嗎 ?
XHR  接受的資料型態 ,[object Object],[{author:‘tempo’, title:‘ 智者的對談 '}, {author:‘browser,koji’, title:‘JSP 技術手冊 '}, {author:‘caterpillar’, title:‘Spring 技術手冊 '}, {author:‘piggy’, title:’Java2 全方位學習’ ];
傑克 :   那所有的瀏覽器都有支援  XHR  嗎 ?
瀏覽器支援 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
瀏覽器支援 function httpRequest (reqType,url){ if(window. XMLHttpRequest ){  // Mozilla, Opera, Safari, … request = new XMLHttpRequest(); } else if (window. ActiveXObject ){  // IE request=new ActiveXObject("Msxml2.XMLHTTP"); if (!request){ request=new ActiveXObject("Microsoft.XMLHTTP"); } } if(request){ … } else { alert(" Your browser does not permit the use of all "+ "of this application's features! "); } }
珍妮佛 :   真奇怪 ,  我使用  XHR,  瀏覽器卻一直跳出安全性問題 ?
跨網域支援 ,[object Object],[object Object],[object Object],[object Object],[object Object]
傑克 :   少來了  tempo,  明明除了  XHR  之外 ,  還有其它方式來存取網站資料
<iframe> 與 <script> ,[object Object]
<iframe> 與 <script> 使用 ,[object Object],[object Object],var sObj = document. createElement (' script '); sObj. src  = ‘ http://www.abc.com ’; document. body . appendChild ( sObj ); var sObj = document. createElement (' iframe '); sObj. src  = ‘ http://www.abc.com ’; sObj. onload  =  function() { iframe_loaded( sObj ); }; document. body . appendChild ( sObj );
<iframe> 與 <script> 資料接收 ,[object Object],[object Object],[object Object],[object Object],[object Object]
<iframe> 與 <script> 優缺點 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
tempo:   那我來做個整理吧
各種方法比較
小細節需要注意 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
珍妮佛 :   好吧  tempo,  這太複雜了 ,  我只是想要存取網站上的資料而已
透過  AJAX Framework  來做非同步傳輸 ,[object Object],[object Object],[object Object]
透過  AJAX Framework  來做非同步傳輸 ,[object Object],[object Object],[object Object],[object Object],[object Object]
D irect  W eb  R emoting 1:50
傑克 :   什麼是  DWR  呢 ?
DWR(Direct Web Remoting) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
DWR From:  http://getahead.ltd.uk/dwr/overview/dwr
珍妮佛 :   我也想試試  DWR,  我該如何安裝呢 ?
Step 1: Download ,[object Object],[object Object],2:00
Step 2: web.xml ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Step 3: dwr.xml ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
DEMO: Installation ,[object Object]
DWR  除錯視窗 ,[object Object],[object Object],[object Object],< init-param > < param-name > debug </ param-name > < param-value > true </ param-value > </ init-param >
建民 :   那  tempo,  你應該要講怎麼做  Hello World  了吧 ? 2:05
Step1:  建立伺服器端的  Java  物件 package  com.willmobile.ajaxtm; public class  HelloWorld { public String  sayHelloWorldTo (String name) { return &quot; Hello World  &quot; + name + &quot; ! &quot;; } }
Step2:  在  dwr.xml  中註冊類別 <dwr> <allow> <create  creator =&quot; new “ javascript =&quot; HelloWorld &quot;  scope =&quot; page &quot;> <param  name =&quot; class &quot; value =&quot; com.willmobile.ajaxtm.HelloWorld &quot; /> </create> </allow> </dwr> ,[object Object]
Step3:  在網頁中  include JavaScript <head> <script  type =' text/javascript ' src =' /dwr-helloworld/dwr/interface/HelloWorld.js'/> <script  type ='text/javascript‘ src =' /dwr-helloworld/dwr/engine.js ‘/> <script  type ='text/javascript‘ src =' /dwr-helloworld/dwr/util.js ‘/> </script> </head> ,[object Object],[object Object]
Step4:  撰寫  client  端  JavaScript <head> <script  type =&quot; text/javascript &quot;> window.onload =  function()  { functon callback (str) { $('output'). innerHTML  = str; } HelloWorld. sayHelloWorldTo (&quot; JavaTwo 2006 &quot;,  callback ); } </script> </head>
遠端物件方法呼叫方式 ,[object Object],[object Object],[object Object],public class  Remote { public String  getData (int  index ) { ... } } function handleGetData (str) { alert(str); } Remote.getData(42,  handleGetData );
Demo: Hello World ,[object Object],[object Object]
Tips & Tricks about DWR 2:15
傑克 :   可以讓遠端  Java  物件存放在  session  或  application scope  嗎 ?
設定遠端物件的  Scope ,[object Object],[object Object],<dwr> <allow> <create creator=&quot;new“ javascript=&quot;HelloWorld&quot;  scope =&quot; page &quot;> <param name=&quot;class&quot; value=&quot;com.willmobile.ajaxtm.HelloWorld&quot; /> </create> </allow> </dwr>
珍妮佛 :   參數可以是自訂的類別嗎 ?
Converters ,[object Object],[object Object],Uses a Converter Uses a Creator From:  http://getahead.ltd.uk/dwr/overview/dwr
Converters ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Converters 設定 <dwr> <allow> <create> … </create> <convert  converter =&quot; bean “ match =&quot; com.willmobile.ajaxtm.User &quot;> </convert> </allow> </dwr> ,[object Object]
傑克 :   任何遠端  Java  物件上的方法都可以呼叫嗎 ?
<include>, <exclude> ,[object Object],<dwr> <allow> <create creator=&quot;new“ javascript=&quot;HelloWorld&quot; scope=&quot;page&quot;> <param name=&quot;class&quot; value=&quot;com.willmobile.ajaxtm.HelloWorld&quot; /> < exclude   method =“ noUse &quot;/> </create> <convert converter=&quot;bean“ match=&quot;com.willmobile.ajaxtm.User&quot;> < param   name =&quot; exclude &quot;  value =&quot; password &quot;/> </convert> </allow> </dwr>
tempo:   那該輪到做一個  Web Form  來試試看 2:20
Step1:  建立伺服器端的  Java  物件 public class  User  { private String  id ; private String  password ; private String  name ; private String  title ; … }
Step2:  建立伺服器端的  Java  物件 public class  UserManager  { private final List<User> users = new ArrayList<User>(); public synchronized void  add (User user) { users. add (user); } public synchronized List<User>  getAll () { return new ArrayList<User>(users); } }
Step3: client script function  addUser () { var user = { id:&quot;&quot;, name:&quot;&quot;, title:&quot;&quot; }; DWRUtil.getValues(user); UserManager.add(user); UserManager.getAll(fillTable); } var cellFuncs = [ function(data) { return data.id; }, function(data) { return data.name; }, function(data) { return data.title; } ]; function  fillTable (users) { DWRUtil.removeAllRows(&quot;usersBody&quot;); DWRUtil.addRows(&quot;usersBody&quot;, users, cellFuncs); }
Demo: DWR Form ,[object Object]
Reverse AJAX 2:25
珍妮佛 :   我也會做  jsp  的聊天室呀 ,  你前面的  Demo  有比較好嗎 ?
Reverse AJAX ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Polling 瀏覽器 伺服器 N 秒送出一個 request 1. 新資料到 2. 新資料傳至瀏覽器 3. 顯示 req1 req2 req3 req4
Comet 瀏覽器 伺服器 1. 新資料到 2. 新資料傳至瀏覽器 3. 顯示 req1 req2
Reverse AJAX ,[object Object],[object Object],[object Object],[object Object],[object Object],ScriptSession. addScript (&quot; alert('Hi') &quot;);
Reverse AJAX ,[object Object],[object Object],[object Object],[object Object],[object Object]
珍妮佛 :   我也想做像前面  Demo  那樣的聊天室 ~~
Step1:  建立伺服器端的  Java  物件 public void addMessage (String text) { … final WebContext wctx = WebContextFactory. get (); // For all the browsers on the current page: String currentPage = wctx. getCurrentPage (); Collection sessions = wctx. getScriptSessionsByPage (currentPage); DwrUtil utilAll = new DwrUtil(sessions); utilAll.removeAllOptions(&quot;chatlog&quot;); utilAll.addOptions(&quot;chatlog&quot;, messages, &quot;text&quot;); }
Step1:  建立伺服器端的  Java  物件 <script type=&quot;text/javascript&quot;> window.onload = function() { DWREngine. setReverseAjax (true); Chatroom. getAllMessages (function(messages) { DWRUtil.removeAllOptions('chatlog'); DWRUtil.addOptions( 'chatlog', messages, 'text'); }); } function sendMessage() { Chatroom. addMessage (DWRUtil.getValue(&quot;text&quot;)); } </script>
Demo: DWR Chat ,[object Object],[object Object]
傑克 :   那你之前  Demo  的股市報價 ,  也是用同一種技術囉 ? 2:30
Step1:  建立伺服器端的  Java  物件 private class  SendTickerDataTask extends TimerTask { public void run() { ServerContext sctx = ServerContextFactory. get (servletContext); Collection sessions = sctx. getScriptSessionsByPage ( “ /dwr-reverse/after.jsp ”); DwrUtil pages = new DwrUtil( sessions, servletContext); pages.setValue(symbol, RandomStockSnapshot. getRandomStockSnapshotString(symbol)); } }
Demo: DWR Reverse ,[object Object],[object Object]
Web Framework Integration 2:35
珍妮佛 :  我不想呼叫物件 ,  我想把整個網頁  include  進來 ,  這可以嗎 ?
AJAX Includes ,[object Object],[object Object],[object Object],public String getInclude () { return WebContextFactory. get () . forwardToString (&quot; /forward.jsp &quot;); } function update () { Demo.getInclude(function(html) { DWRUtil. setValue (&quot; somediv &quot;, html); } );
傑克 : 這樣也行 ,  那我想要呼叫我伺服器上的  spring beans,  不會也可以吧 ?
Spring Integration ,[object Object],[object Object],<allow> <create creator=&quot; spring &quot; javascript=&quot;Fred&quot;> <param name=&quot;beanName&quot; value=&quot;Shiela&quot;/> </create> </allow> <context-param> <param-name> contextConfigLocation </param-name> <param-value>/WEB-INF/classes/beans.xml</param-value> </context-param>
珍妮佛 : 好吧 ,  那像  Struts, Webwork  應該也不是問題囉 ?
Struts Integration ,[object Object],[object Object],[object Object],<allow> <create creator=&quot; struts &quot; javascript=&quot;Fred&quot;> <param name=&quot;beanName&quot; value=&quot;Shiela&quot;/> </create> </allow>
其他的功能 2:40
傑克 :  我想要連續呼叫三個遠端函式 ,  這樣使用者會等比較久嗎 ?
Batching ,[object Object],beginBatch (); … endBatch ();
珍妮佛 :  我看你的網頁右上方都有像  gmail  一樣的  loading message,  我也要
Loading Message ,[object Object],DWRUtils.useLoadingMessage(); Or DWRUtils.useLoadingMessage(‘Waiting…’);
傑克 :  你都沒有提到錯誤處理機制  :(
Error Handling ,[object Object],[object Object],function handler(msg) { alert(msg); } DWREngine.setErrorHandler(handler); Remote.method(params, { callback:function(data) { ... }, errorHandler:handler });
傑克 :  哇 , DWR/AJAX  真棒 ,  可是 back/forward  鍵沒用了  :(
瀏覽器歷史紀錄問題 ,[object Object],[object Object],[object Object]
珍妮佛 :  以上提到的方法所有瀏覽器都支援嗎 ?
瀏覽器支援 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
傑克 :  我已經有使用其他  framework  了 ,  那我該如何整合  DHR  呢 ?
DWR  與其它  AJAX Framework ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],2:45
Thank you! 如果你流落荒島 ,  但是只能帶一個  AJAX Framework,  建議你帶  DWR   馮彥文 [email_address]
我想請教關於 ..

Weitere ähnliche Inhalte

Was ist angesagt?

Flash对象在(X)Html中的格式和参数及安全性
Flash对象在(X)Html中的格式和参数及安全性Flash对象在(X)Html中的格式和参数及安全性
Flash对象在(X)Html中的格式和参数及安全性taobao.com
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战Huang Toby
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
由浅到深了解Java Script类
由浅到深了解Java Script类由浅到深了解Java Script类
由浅到深了解Java Script类sosoyou
 
Introduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDKIntroduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDK維佋 唐
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
Javascript 性能优化总结.docx
Javascript 性能优化总结.docxJavascript 性能优化总结.docx
Javascript 性能优化总结.docxbaixingfa
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Justin Lin
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3LiviaLiaoFontech
 
Prototype开发手册
Prototype开发手册Prototype开发手册
Prototype开发手册yiditushe
 

Was ist angesagt? (16)

Flash对象在(X)Html中的格式和参数及安全性
Flash对象在(X)Html中的格式和参数及安全性Flash对象在(X)Html中的格式和参数及安全性
Flash对象在(X)Html中的格式和参数及安全性
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
由浅到深了解Java Script类
由浅到深了解Java Script类由浅到深了解Java Script类
由浅到深了解Java Script类
 
Introduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDKIntroduction to Parse JavaScript SDK
Introduction to Parse JavaScript SDK
 
RESTful API Design
RESTful API DesignRESTful API Design
RESTful API Design
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
Javascript 性能优化总结.docx
Javascript 性能优化总结.docxJavascript 性能优化总结.docx
Javascript 性能优化总结.docx
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
ev2oik
ev2oikev2oik
ev2oik
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
Prototype开发手册
Prototype开发手册Prototype开发手册
Prototype开发手册
 
Json知识分享
Json知识分享Json知识分享
Json知识分享
 

Andere mochten auch

Compendio de derecho_sucesoral_-_mario_echeverria_esquivel
Compendio de derecho_sucesoral_-_mario_echeverria_esquivelCompendio de derecho_sucesoral_-_mario_echeverria_esquivel
Compendio de derecho_sucesoral_-_mario_echeverria_esquivelArismael Troncoso
 
Understanding And Managing Memory
Understanding And Managing MemoryUnderstanding And Managing Memory
Understanding And Managing Memoryisma ishak
 
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...Profª Cristiana Passinato
 
Role of family in international assignment
Role of family in international assignmentRole of family in international assignment
Role of family in international assignmentStudsPlanet.com
 
Workplace Stress Risk Management
Workplace Stress Risk ManagementWorkplace Stress Risk Management
Workplace Stress Risk ManagementDavid Alman
 
Central Sacramento Workshop Challenges And Successes
Central Sacramento Workshop Challenges And SuccessesCentral Sacramento Workshop Challenges And Successes
Central Sacramento Workshop Challenges And Successesncook
 
Voluntariado corporativo
Voluntariado corporativoVoluntariado corporativo
Voluntariado corporativoJosé María
 
CSS Methodology
CSS MethodologyCSS Methodology
CSS MethodologyZohar Arad
 
Digital citizenship 1
Digital citizenship  1Digital citizenship  1
Digital citizenship 1takahe2
 
Dutch, French, English, & Stuff
Dutch, French, English, & StuffDutch, French, English, & Stuff
Dutch, French, English, & Stuffgrieffel
 
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...angeliaGeo
 

Andere mochten auch (20)

Perfiles profesionales Consultor Mercado de la Energía
 Perfiles profesionales Consultor Mercado de la Energía Perfiles profesionales Consultor Mercado de la Energía
Perfiles profesionales Consultor Mercado de la Energía
 
Cogmaster_Ep4
Cogmaster_Ep4Cogmaster_Ep4
Cogmaster_Ep4
 
Compendio de derecho_sucesoral_-_mario_echeverria_esquivel
Compendio de derecho_sucesoral_-_mario_echeverria_esquivelCompendio de derecho_sucesoral_-_mario_echeverria_esquivel
Compendio de derecho_sucesoral_-_mario_echeverria_esquivel
 
Understanding And Managing Memory
Understanding And Managing MemoryUnderstanding And Managing Memory
Understanding And Managing Memory
 
CONGEP 2009 - 8 Dez
CONGEP 2009 - 8 DezCONGEP 2009 - 8 Dez
CONGEP 2009 - 8 Dez
 
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...
Sandrogreco Energetic Aspects Of Cyclic Pi Electron Delocalization Evaluation...
 
Role of family in international assignment
Role of family in international assignmentRole of family in international assignment
Role of family in international assignment
 
Workplace Stress Risk Management
Workplace Stress Risk ManagementWorkplace Stress Risk Management
Workplace Stress Risk Management
 
Central Sacramento Workshop Challenges And Successes
Central Sacramento Workshop Challenges And SuccessesCentral Sacramento Workshop Challenges And Successes
Central Sacramento Workshop Challenges And Successes
 
Monografia Erivaldo pedagogia 2010
Monografia Erivaldo pedagogia 2010Monografia Erivaldo pedagogia 2010
Monografia Erivaldo pedagogia 2010
 
Module 6
Module 6Module 6
Module 6
 
Voluntariado corporativo
Voluntariado corporativoVoluntariado corporativo
Voluntariado corporativo
 
CSS Methodology
CSS MethodologyCSS Methodology
CSS Methodology
 
H42023442
H42023442H42023442
H42023442
 
Digital citizenship 1
Digital citizenship  1Digital citizenship  1
Digital citizenship 1
 
Dutch, French, English, & Stuff
Dutch, French, English, & StuffDutch, French, English, & Stuff
Dutch, French, English, & Stuff
 
GeoffW's PhD
GeoffW's PhDGeoffW's PhD
GeoffW's PhD
 
Agenda arquidiocesana n° 170
Agenda arquidiocesana n° 170Agenda arquidiocesana n° 170
Agenda arquidiocesana n° 170
 
Edf
EdfEdf
Edf
 
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...
Healthy Eating and Physical Activity: Addressing Inequities in Urban Environm...
 

Ähnlich wie Ajax Transportation Methods

javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当裕波 周
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)amd6400
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)amd6400
 
YUI ─ 阿大
YUI ─ 阿大YUI ─ 阿大
YUI ─ 阿大taobao.com
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会Zhi Zhong
 
关于Js的跨域操作
关于Js的跨域操作关于Js的跨域操作
关于Js的跨域操作王 承石
 
Windows Mobile Widget 開發
Windows Mobile Widget 開發Windows Mobile Widget 開發
Windows Mobile Widget 開發Chui-Wen Chiu
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
Struts1+ hibernate3
Struts1+ hibernate3Struts1+ hibernate3
Struts1+ hibernate3edanwade
 
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)amd6400
 
HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)amd6400
 
HTML5概览
HTML5概览HTML5概览
HTML5概览Adam Lu
 
揭秘Html5和Css3
揭秘Html5和Css3揭秘Html5和Css3
揭秘Html5和Css3Adam Lu
 
揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍裕波 周
 
Html5css3 go.yeefe.com
Html5css3 go.yeefe.comHtml5css3 go.yeefe.com
Html5css3 go.yeefe.comtellyeefe
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送yongboy
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
追风堂 Javascript
追风堂 Javascript追风堂 Javascript
追风堂 Javascriptminipeach
 

Ähnlich wie Ajax Transportation Methods (20)

javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当
 
Web base 吴志华
Web base 吴志华Web base 吴志华
Web base 吴志华
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
 
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
 
YUI ─ 阿大
YUI ─ 阿大YUI ─ 阿大
YUI ─ 阿大
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
关于Js的跨域操作
关于Js的跨域操作关于Js的跨域操作
关于Js的跨域操作
 
Windows Mobile Widget 開發
Windows Mobile Widget 開發Windows Mobile Widget 開發
Windows Mobile Widget 開發
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
Struts1+ hibernate3
Struts1+ hibernate3Struts1+ hibernate3
Struts1+ hibernate3
 
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)
 
HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)
 
HTML5概览
HTML5概览HTML5概览
HTML5概览
 
揭秘Html5和Css3
揭秘Html5和Css3揭秘Html5和Css3
揭秘Html5和Css3
 
揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍
 
Html5css3 go.yeefe.com
Html5css3 go.yeefe.comHtml5css3 go.yeefe.com
Html5css3 go.yeefe.com
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
追风堂 Javascript
追风堂 Javascript追风堂 Javascript
追风堂 Javascript
 
Html5
Html5Html5
Html5
 

Mehr von yiditushe

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册yiditushe
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2yiditushe
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1yiditushe
 
性能测试技术
性能测试技术性能测试技术
性能测试技术yiditushe
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术yiditushe
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试yiditushe
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训yiditushe
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程yiditushe
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Luceneyiditushe
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍yiditushe
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Actionyiditushe
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1yiditushe
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demoyiditushe
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析yiditushe
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则yiditushe
 
10 团队开发
10  团队开发10  团队开发
10 团队开发yiditushe
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模yiditushe
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模yiditushe
 

Mehr von yiditushe (20)

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1
 
性能测试技术
性能测试技术性能测试技术
性能测试技术
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Lucene
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demo
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则
 
10 团队开发
10  团队开发10  团队开发
10 团队开发
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模
 

Ajax Transportation Methods

  • 1. AJAX 的 client/server 溝通機制探究 馮彥文 隨想行動科技
  • 2.
  • 3. 這個故事 , 就從兩個技術人在一次研討會中的偶然相遇開始…
  • 4. 傑克 : Hi 珍妮佛 , 你知道這個 session 最主要是講 ?
  • 5.
  • 6.
  • 7.
  • 8. What We Will Focus on Here Browser Compatibility, Cross-Domains, Java Data Marshalling, JSON , JSON-RPC, DOJO, DWR, GWT, iframe , Prototype, Timeout & Error Handling, Reverse AJAX, History & Bookmarks, scriptTag , Web Framework Integration, XHR, XML
  • 10. 珍妮佛 : 什麼是 AJAX? 什麼又是非同步傳輸 ?
  • 11.
  • 12. Classic Web Applications From: http://adaptivepath.com/publications/essays/archives/000385.php
  • 13. AJAX Web Applications From: http://adaptivepath.com/publications/essays/archives/000385.php
  • 14. 傑克 : 那我該如何利用 AJAX 存取遠端網站資料呢 ?
  • 15.
  • 16.
  • 17.
  • 18.
  • 19. Tips & Tricks about XHR 1:40
  • 20. 珍妮佛 : 傑克 , 這真是太神奇了 , 但傳輸的資料一定要是 XML 格式嗎 ?
  • 21.
  • 22. 傑克 : 那所有的瀏覽器都有支援 XHR 嗎 ?
  • 23.
  • 24. 瀏覽器支援 function httpRequest (reqType,url){ if(window. XMLHttpRequest ){ // Mozilla, Opera, Safari, … request = new XMLHttpRequest(); } else if (window. ActiveXObject ){ // IE request=new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); if (!request){ request=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;); } } if(request){ … } else { alert(&quot; Your browser does not permit the use of all &quot;+ &quot;of this application's features! &quot;); } }
  • 25. 珍妮佛 : 真奇怪 , 我使用 XHR, 瀏覽器卻一直跳出安全性問題 ?
  • 26.
  • 27. 傑克 : 少來了 tempo, 明明除了 XHR 之外 , 還有其它方式來存取網站資料
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. tempo: 那我來做個整理吧
  • 34.
  • 35. 珍妮佛 : 好吧 tempo, 這太複雜了 , 我只是想要存取網站上的資料而已
  • 36.
  • 37.
  • 38. D irect W eb R emoting 1:50
  • 39. 傑克 : 什麼是 DWR 呢 ?
  • 40.
  • 41. DWR From: http://getahead.ltd.uk/dwr/overview/dwr
  • 42. 珍妮佛 : 我也想試試 DWR, 我該如何安裝呢 ?
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48. 建民 : 那 tempo, 你應該要講怎麼做 Hello World 了吧 ? 2:05
  • 49. Step1: 建立伺服器端的 Java 物件 package com.willmobile.ajaxtm; public class HelloWorld { public String sayHelloWorldTo (String name) { return &quot; Hello World &quot; + name + &quot; ! &quot;; } }
  • 50.
  • 51.
  • 52. Step4: 撰寫 client 端 JavaScript <head> <script type =&quot; text/javascript &quot;> window.onload = function() { functon callback (str) { $('output'). innerHTML = str; } HelloWorld. sayHelloWorldTo (&quot; JavaTwo 2006 &quot;, callback ); } </script> </head>
  • 53.
  • 54.
  • 55. Tips & Tricks about DWR 2:15
  • 56. 傑克 : 可以讓遠端 Java 物件存放在 session 或 application scope 嗎 ?
  • 57.
  • 58. 珍妮佛 : 參數可以是自訂的類別嗎 ?
  • 59.
  • 60.
  • 61.
  • 62. 傑克 : 任何遠端 Java 物件上的方法都可以呼叫嗎 ?
  • 63.
  • 64. tempo: 那該輪到做一個 Web Form 來試試看 2:20
  • 65. Step1: 建立伺服器端的 Java 物件 public class User { private String id ; private String password ; private String name ; private String title ; … }
  • 66. Step2: 建立伺服器端的 Java 物件 public class UserManager { private final List<User> users = new ArrayList<User>(); public synchronized void add (User user) { users. add (user); } public synchronized List<User> getAll () { return new ArrayList<User>(users); } }
  • 67. Step3: client script function addUser () { var user = { id:&quot;&quot;, name:&quot;&quot;, title:&quot;&quot; }; DWRUtil.getValues(user); UserManager.add(user); UserManager.getAll(fillTable); } var cellFuncs = [ function(data) { return data.id; }, function(data) { return data.name; }, function(data) { return data.title; } ]; function fillTable (users) { DWRUtil.removeAllRows(&quot;usersBody&quot;); DWRUtil.addRows(&quot;usersBody&quot;, users, cellFuncs); }
  • 68.
  • 70. 珍妮佛 : 我也會做 jsp 的聊天室呀 , 你前面的 Demo 有比較好嗎 ?
  • 71.
  • 72. Polling 瀏覽器 伺服器 N 秒送出一個 request 1. 新資料到 2. 新資料傳至瀏覽器 3. 顯示 req1 req2 req3 req4
  • 73. Comet 瀏覽器 伺服器 1. 新資料到 2. 新資料傳至瀏覽器 3. 顯示 req1 req2
  • 74.
  • 75.
  • 76. 珍妮佛 : 我也想做像前面 Demo 那樣的聊天室 ~~
  • 77. Step1: 建立伺服器端的 Java 物件 public void addMessage (String text) { … final WebContext wctx = WebContextFactory. get (); // For all the browsers on the current page: String currentPage = wctx. getCurrentPage (); Collection sessions = wctx. getScriptSessionsByPage (currentPage); DwrUtil utilAll = new DwrUtil(sessions); utilAll.removeAllOptions(&quot;chatlog&quot;); utilAll.addOptions(&quot;chatlog&quot;, messages, &quot;text&quot;); }
  • 78. Step1: 建立伺服器端的 Java 物件 <script type=&quot;text/javascript&quot;> window.onload = function() { DWREngine. setReverseAjax (true); Chatroom. getAllMessages (function(messages) { DWRUtil.removeAllOptions('chatlog'); DWRUtil.addOptions( 'chatlog', messages, 'text'); }); } function sendMessage() { Chatroom. addMessage (DWRUtil.getValue(&quot;text&quot;)); } </script>
  • 79.
  • 80. 傑克 : 那你之前 Demo 的股市報價 , 也是用同一種技術囉 ? 2:30
  • 81. Step1: 建立伺服器端的 Java 物件 private class SendTickerDataTask extends TimerTask { public void run() { ServerContext sctx = ServerContextFactory. get (servletContext); Collection sessions = sctx. getScriptSessionsByPage ( “ /dwr-reverse/after.jsp ”); DwrUtil pages = new DwrUtil( sessions, servletContext); pages.setValue(symbol, RandomStockSnapshot. getRandomStockSnapshotString(symbol)); } }
  • 82.
  • 84. 珍妮佛 : 我不想呼叫物件 , 我想把整個網頁 include 進來 , 這可以嗎 ?
  • 85.
  • 86. 傑克 : 這樣也行 , 那我想要呼叫我伺服器上的 spring beans, 不會也可以吧 ?
  • 87.
  • 88. 珍妮佛 : 好吧 , 那像 Struts, Webwork 應該也不是問題囉 ?
  • 89.
  • 91. 傑克 : 我想要連續呼叫三個遠端函式 , 這樣使用者會等比較久嗎 ?
  • 92.
  • 93. 珍妮佛 : 我看你的網頁右上方都有像 gmail 一樣的 loading message, 我也要
  • 94.
  • 95. 傑克 : 你都沒有提到錯誤處理機制 :(
  • 96.
  • 97. 傑克 : 哇 , DWR/AJAX 真棒 , 可是 back/forward 鍵沒用了 :(
  • 98.
  • 99. 珍妮佛 : 以上提到的方法所有瀏覽器都支援嗎 ?
  • 100.
  • 101. 傑克 : 我已經有使用其他 framework 了 , 那我該如何整合 DHR 呢 ?
  • 102.
  • 103. Thank you! 如果你流落荒島 , 但是只能帶一個 AJAX Framework, 建議你帶 DWR  馮彥文 [email_address]