亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Jquery ajax基礎教程

2019-11-20 11:13:08
字體:
來源:轉載
供稿:網友

jQuery的Ajax帶來了無需刷新的web頁面革命。這里就詳細介紹一下jQuery所涉及到的Ajax操作。(無需特殊說明,均需要有服務器配置,這里本人用的是Tomcat 7)

1.基于請求加載文件數據

這里的請求通常都是網頁的某些操作,如點擊等。

而其加載數據的類型歸類為以下四種:a.加載HTML文件;b.加載JSON文件;c.加載Javascript文件;d.加載XML文件。

其對應的四種加載方法分別是:load、getJSON、getScript、get。

a.加載HTML文件

把編寫好的HTML文件加載到網頁中。例如:

//load方法加載html文件 $('#letter-a a').click(function(){     $('#dictionary').load('a.html');     return false; });

這里a.html也是放在服務器端的一個已經編寫好的頁面文件,直接調用load,就可以讓所匹配的目標內載入HTML內容。

b.加載JSON文件

把編寫好的JSON文件加載到網頁中。例如:

//加載json文件 $('#letter-b a').click(function(){   $.getJSON('b.json',function(data){     var html = '';     $.each(data,function(entryIndex, entry){       html += "<div class='entry'>";       html += "<h3 class='term'>" + entry.term + "</h3>";       html += "<div class='part'>" + entry.part + "</div>";       html += "<div class='definition'>";       html += entry.definition;       if(entry.quote){         html += '<div class="quote">';         $.each(entry.quote, function(lineIndex, line){           html += '<div class="quote-line">' + line + '</div>';         });         if(entry.author){           html += '<div class="quote-author">' + entry.author + '</div>';         }       }       html += "</div>";       html += "</div>";     });     $('#dictionary').html(html);   });   return false;  }); 

getJSON方法第一個參數是指加載的文件路徑,第二個參數是一個加載完成以后的回調函數。通過這個回調函數,就可以對加載好的data進行操作。重復的部分使用each循環處理。最后將拼湊好的html字符串使用html方法加入到目標id=dictionary的元素中。

c.加載Javascript文件

加載Javascript文件和加載HTML文件類似。這里需要注意的是,使用getScript方法加載進來的Javascript會根據當下Javascript環境直接運行。例如:

//執行腳本 $('#letter-c a').click(function(){     $.getScript('c.js');     return false; }); 

d.加載XML文件

jQuery中可以使用get方法加載XML文件。例如:

//加載XML文檔 $('#letter-d a').click(function(){     $.get('d.xml',function(data){       $('#dictionary').empty();       $(data).find('entry').each(function(){         var $entry = $(this);         var html = '<div class="entry">';         html += '<h3 class="term">' + $entry.attr('term') + '</h3>';         html += '<div class="part">' + $entry.attr('part') + '</div>';         html += '<div class="definition">';         html += $entry.find('definition').text();         var $quote = $entry.find('quote');         if($quote.length)         {           html += '<div class="quote">';           $quote.find('line').each(function(){             html += '<div class="quote-line">';             html += $(this).text() + '</div>';           });           if($quote.attr('author')){             html += '<div class="quote-author">';             html += $quote.attr('author') + '</div>';           }           html += '</div>';         }         html += '</div>';         html += '</div>';         $('#dictionary').append($(html));       });     });     return false; }); 

XML文件有一個特點就是,你可以像用jQuery操作HTML那樣操作XML的那些元素。如使用attr方法、text方法等等。

2.基于Get方法向服務器獲取數據

之前的例子都是從服務器上靜態的獲取數據文件。而Ajax的價值不只于此,通過get方法從服務器動態的獲取數據,為web頁面無刷新的實現提供了莫大的幫助。

下面就使用get方法從服務器獲取一段所需要的數據。這里,本人結合J2EE的Struts2框架和TOMCAT搭建的服務器端。具體服務器端多種多樣,可以是php+apache或者其他什么的都可以。

操作如下,用戶點擊Eavesdrop則發送get方法到服務器,取得Eavesdrop的數據,并且返回json值,然后在jQuery中裝配。

代碼如下:

//GET方法加載服務器內容 $('#letter-e a').click(function(){     var requestData = {term:$(this).text().toUpperCase()};     $.get('EGet.action', requestData, function(data){             //返回的數據包結構根據Struts2配置如下:       //{"resultMSG":"{ 內部另一個json結構 }","success":"true"}       //先將返回的數據包拆包       var responseObj = eval("("+data+")");       if(responseObj.success == 'true')       {         $('#dictionary').empty();         //返回成功,接下來再次解包resultMSG         var dataObj = eval("("+responseObj.resultMSG+")");         var html = "";         html += "<div class='entry'>";         html += "<h3 class='term'>" + dataObj.term + "</h3>";         html += "<div class='part'>" + dataObj.part + "</div>";         html += "<div class='definition'>";         html += dataObj.definition;         if(dataObj.quote){           html += '<div class="quote">';           $.each(dataObj.quote, function(lineIndex, line){             html += '<div class="quote-line">' + line + '</div>';           });           if(dataObj.author){             html += '<div class="quote-author">' + dataObj.author + '</div>';           }         }         html += "</div>";         html += "</div>";         $('#dictionary').html(html);       }       else       {         var $warning = $('<div>Sorry, your term was not found!</div>');         $('#dictionary').html($warning);       }     });     return false; }); 

這里要說明的是由于struts2配置,返回的時候在需要的數據外又打了一層包,用于表示結果內容的resultMSG和是否ajax訪問成功的success字段。所以使用了2次eval解包。

這里我后臺java程序傳遞過來的并非配置好的HTML,而是僅僅是json類型的數據,本人認為在java層面編寫html并傳遞不如直接傳遞數據方便,以后修改樣式或者頁面結構也都不如直接修改javascript方便。

通過get方法獲得服務器數據,相當于向服務器提交如下這種請求:EGet.action?term=XXX

下面放出java后臺文件代碼:

1.EGet.java

package lhb; import com.opensymphony.xwork2.ActionSupport; public class EGet extends ActionSupport {   private String term;   private Terms sampleTerm;   private String success;   private String resultMSG;   /**    *    */   private static final long serialVersionUID = 1L;   public String execute() throws Exception   {     initData();     if(term.equals(sampleTerm.getTerm()))     {       success = "true";       resultMSG = "{/"term/": /""+sampleTerm.getTerm()+"/","+           "/"part/": /""+sampleTerm.getPart()+"/","+           "/"definition/": /""+sampleTerm.getDefinition()+"/","+           "/"quote/": ["+           "/"Is public worship, then, a sin,/","+           "/"That for devotions paid to Bacchus/","+           "/"The lictors dare to run us in,/","+           "/"And resolutely thump and whack us?/""+           "],"+           "/"author/": /""+sampleTerm.getAuthor()+"/"}";     }     else{       success = "false";       resultMSG = "fail";     }     return SUCCESS;   }   //初始化數據   private void initData()   {     String partEAVESDROP = "v.i.";     String definitionEAVESDROP = "Secretly to overhear a catalogue of the crimes and vices of another or yourself.";     String quoteEAVESDROP[] = {"A lady with one of her ears applied",         "To an open keyhole heard, inside,",         "Two female gossips in converse free ―",         "The subject engaging them was she.",         "/"I think,/" said one, /"and my husband thinks",         "That she's a prying, inquisitive minx!/"",         "As soon as no more of it she could hear",         "The lady, indignant, removed her ear.",         "/"I will not stay,/" she said, with a pout,",         "/"To hear my character lied about!/""};     String authorEAVESDROP = "Gopete Sherany";     Terms EAVESDROP = new Terms();     EAVESDROP.setTerm("EAVESDROP");     EAVESDROP.setPart(partEAVESDROP);     EAVESDROP.setDefinition(definitionEAVESDROP);     EAVESDROP.setQuote(quoteEAVESDROP);     EAVESDROP.setAuthor(authorEAVESDROP);     sampleTerm = EAVESDROP;   }   public String getTerm()   {     return term;   }   public void setTerm(String term)   {     this.term = term;   }   public String getSuccess()   {     return success;   }   public void setSuccess(String success)   {     this.success = success;   }   public String getResultMSG()   {     return resultMSG;   }   public void setResultMSG(String resultMSG)   {     this.resultMSG = resultMSG;   } } 

這個action中的數據本人直接配置了,這里只是做一個示范使用。真正的這些數據在項目中一般是存放在數據庫中的。由于這主要是jQuery方面的小示例,就不弄那么麻煩了。

2.Terms.java

package lhb; public class Terms {   private String term;   private String part;   private String definition;   private String quote[];   private String author;   public String getTerm()   {     return term;   }   public void setTerm(String term)   {     this.term = term;   }   public String getPart()   {     return part;   }   public void setPart(String part)   {     this.part = part;   }   public String getDefinition()   {     return definition;   }   public void setDefinition(String definition)   {     this.definition = definition;   }   public String[] getQuote()   {     return quote;   }   public void setQuote(String[] quote)   {     this.quote = quote;   }   public String getAuthor()   {     return author;   }   public void setAuthor(String author)   {     this.author = author;   } } 

這個類純粹就是一個pojo類。沒有什么特別的方法。

3.struts.xml

這個是struts2的json方式傳遞配置

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"   "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>   <!-- 指定全局國際化資源文件 -->   <constant name="struts.custom.i18n.resources" value="i18n"/>   <!-- 指定國際化編碼所使用的字符集 -->   <constant name="struts.i18n.encoding" value="GBK"/>   <!-- JSON的action -->   <package name="jsonInfo" extends="json-default">     <action name="EGet" class="lhb.EGet">       <result type="json">         <param name="contentType">text/html</param>         <param name="includeProperties">success, resultMSG</param>       </result>     </action>   </package> </struts> 

這里可以看到includeProperties里所配置的外面一層json,success和resultMSG。這在實際中很好用。如果服務器中沒有取得需要的值,雖然ajax訪問成功,但是獲得的結果并不算成功,因為沒有取得需要的值。這里加入了success標示,方便前臺jQuery操作。

基于其他方法獲取服務器數據從寫法上與get基本一致,如post方法、load方法。這里就不再贅述了。

3.動態提交表單

通過jQuery的AJAX支持,可以讓我們很方便的動態提交表單而不用刷新頁面。

如下面例子:

$('#letter-f form').submit(function(){     //調用preventDefault方法阻止事件冒泡,具體工作就是如果網頁有腳本錯誤,那么則會阻止提交form表單     event.preventDefault();     var formValues = $('input[id="term"]').val();     var requestStr = {'term':formValues.toUpperCase()};     $.get('EGet.action', requestStr, function(data){       var responseObj = $.parseJSON(data);       if(responseObj.success == 'true')       {         var html = '';         var dataObj = $.parseJSON(responseObj.resultMSG);         html += "<div class='entry'>";         html += "<h3 class='term'>" + dataObj.term + "</h3>";         html += "<div class='part'>" + dataObj.part + "</div>";         html += "<div class='definition'>";         html += dataObj.definition;         if(dataObj.quote){           html += '<div class="quote">';           $.each(dataObj.quote, function(lineIndex, line){             html += '<div class="quote-line">' + line + '</div>';           });           if(dataObj.author){             html += '<div class="quote-author">' + dataObj.author + '</div>';           }         }         html += "</div>";         html += "</div>";         $('#dictionary').html(html);       }       else{         var warning = $('Sorry, your term was not found!');         $('#dictionary').html(warning);       }     }); }); 

這個例子援引的數據還是上一個EGet.action所用的那個數據。程序的操作過程基本是:

首先調用這個 preventDefault();這個方法在注釋里也說明了,用于阻止事件冒泡帶來的不便與麻煩。

接下來通過$()獲得input的元素,使用val方法獲得其值,接下來的使用方法與上例基本相同。

這里也可以使用serialize方法將input元素序列化成如下格式“term=xxx”這樣。不過由于服務器端的java程序中的那些數據時硬編碼的,所有,不是太方便用,就沒用。

4.關于Ajax的觀察員函數

jQuery包含了2個全局的ajax觀察員函數:ajaxStart和ajaxStop。

分別在執行ajax操作的起始和結束時調用。例如:

//ajax的觀察員函數 ajaxStart 和 ajaxStop   $('<div id="loading">Loading...</div>').insertBefore('#dictionary')     .ajaxStart(function(){       $(this).show();     }).ajaxStop(function(){       $(this).hide();     }); 

這里無論哪個a標簽觸發ajax操作,包括靜態載入文件和動態服務器訪問,都會觸發ajaxStart和ajaxStop。
關于錯誤處理,常用的三個函數:success、complete、error。

下面以error為例:

.error(function(jqXHR){   $('#dictionary').html('An Error occurred:'+ jqXHR.status).append(jqXHR.responseText); }); 

可以以連綴的寫法將error方法放置于get方法之后:“$.get().error()”這樣。
剛才看了一下,這個可以將Tomcat的報錯,加載到頁面之上。這在有的時候還是很有用的。如圖:

不過不知道為何這個將我原有樣式也覆蓋了一些,如果有哪位網友知道,麻煩指正一下問題所在。謝謝了。

5.Ajax和事件

Ajax動態訪問服務器以后生成的元素,如果想綁定事件的話,一種方法是每次取到都重新綁定處理程序,這種相對來說比較簡單,但是不適合DOM結構經常變化的場景。如果DOM結構經常變化,那么就需要用live方法,實現事件委托。

live用法與bind一樣。

關于jquery ajax基礎教程今天小編就給大家介紹到這里,后續還會持續給大家介紹,希望大家繼續關注武林網網站,有你們的關注我們會做的更好,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人精品久久久| 久久男人av资源网站| 日韩欧美在线一区| 久久久久久午夜| 国产在线视频2019最新视频| 色综合五月天导航| 久久精品视频亚洲| 国产精品美女av| 日韩欧美国产免费播放| 日韩精品亚洲元码| 亚洲国产精品成人va在线观看| 亚洲国模精品一区| 亚洲激情视频在线播放| 亚洲一区二区三区成人在线视频精品| 国产精品一久久香蕉国产线看观看| 亚洲欧美在线播放| 国产日韩在线看| 日韩免费视频在线观看| 成人啪啪免费看| www高清在线视频日韩欧美| 日韩精品免费一线在线观看| 日韩免费观看视频| 97婷婷涩涩精品一区| 久久久久中文字幕| 日韩av免费在线播放| www.美女亚洲精品| 国产精品对白刺激| 菠萝蜜影院一区二区免费| 久久九九免费视频| 91精品国产高清久久久久久91| 欧美电影免费观看| 国产欧美日韩丝袜精品一区| 亚洲激情免费观看| 97成人超碰免| 欧美—级高清免费播放| 亚洲一区二区在线| 欧美电影免费播放| 91精品视频在线免费观看| 欧洲s码亚洲m码精品一区| 亚洲精品视频播放| 精品久久在线播放| 九九热这里只有在线精品视| 国产精品福利无圣光在线一区| 精品国产999| 亚洲国产私拍精品国模在线观看| 亚洲欧美精品中文字幕在线| 久久国内精品一国内精品| 视频在线观看一区二区| 亚洲va男人天堂| 欧美日韩另类在线| 国产一区二区三区毛片| 亚洲国产精品福利| 欧美成人午夜激情| 韩国日本不卡在线| 亚洲精品福利免费在线观看| 日av在线播放中文不卡| 国语自产精品视频在线看| 久久久久久高潮国产精品视| 成人女保姆的销魂服务| 国产精品激情av在线播放| 亚洲美女www午夜| 亚洲国产高潮在线观看| 欧美日韩免费观看中文| 亚洲va欧美va国产综合久久| 国自产精品手机在线观看视频| 成人av在线网址| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲另类欧美自拍| 欧美在线观看www| 最新亚洲国产精品| 欧美在线观看网址综合| 深夜福利亚洲导航| 欧日韩在线观看| 精品久久久久久久久久ntr影视| 日韩高清欧美高清| 久久亚洲成人精品| 97久久久久久| 成人夜晚看av| 国产精品va在线播放| 欧美极品第一页| 久久五月天综合| 国内久久久精品| xxxx性欧美| 菠萝蜜影院一区二区免费| 日韩精品视频在线免费观看| 97av在线视频| 国产精品久久久久77777| 亚洲美女在线看| 欧美亚洲免费电影| 亚洲久久久久久久久久| 日本aⅴ大伊香蕉精品视频| 欧美日本中文字幕| 日韩欧美亚洲综合| 美女视频黄免费的亚洲男人天堂| 人人做人人澡人人爽欧美| 成人综合网网址| 久久亚洲国产成人| 亚洲美女在线观看| 国产精品视频xxx| 亚洲综合色av| 欧美激情视频播放| 成人福利网站在线观看11| 日韩中文在线中文网在线观看| 国产精品专区第二| 国产精品1234| 精品国偷自产在线视频| 亚洲视频专区在线| 国产成人精品国内自产拍免费看| 国产日韩在线精品av| 毛片精品免费在线观看| 久久综合伊人77777蜜臀| 久久久久久91香蕉国产| 久久免费观看视频| 久久久免费电影| 中文字幕亚洲无线码在线一区| 97人人模人人爽人人喊中文字| 国产美女扒开尿口久久久| 国产亚洲欧美aaaa| 久久97久久97精品免视看| 97超级碰碰人国产在线观看| 91精品视频一区| 91九色在线视频| 668精品在线视频| 91精品国产91久久| 免费99精品国产自在在线| 欧美日韩国产综合视频在线观看中文| 国产精品久久久久不卡| 日韩av免费看网站| 精品夜色国产国偷在线| 色噜噜狠狠色综合网图区| 国产一区二区丝袜高跟鞋图片| 色偷偷综合社区| 欧美黑人巨大xxx极品| 欧美韩日一区二区| 在线a欧美视频| 国产精品久久久久久影视| 国产91色在线| 欧美有码在线视频| 综合欧美国产视频二区| 亚洲国产小视频| 成人久久久久久久| 日韩av日韩在线观看| 欧美精品激情在线| 秋霞成人午夜鲁丝一区二区三区| 91麻豆桃色免费看| 久久综合亚洲社区| 欧美成人性色生活仑片| 在线看日韩欧美| 日韩av综合网站| 中文字幕日本精品| 成年无码av片在线| 亚洲国产又黄又爽女人高潮的| 国产精品久久中文| 日韩免费在线视频| 欧美性生交xxxxx久久久| 亚洲欧美在线免费观看| 欧美巨乳在线观看| 亚洲成人精品视频在线观看| www高清在线视频日韩欧美| 国产成人精品免高潮在线观看| 66m—66摸成人免费视频| 国产日韩欧美日韩大片| 亚洲精品影视在线观看| 久久亚洲精品小早川怜子66|