国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

簡單介紹不用庫(框架)自己寫ajax

來源:懂視網 責編:小采 時間:2020-11-27 19:46:36
文檔

簡單介紹不用庫(框架)自己寫ajax

簡單介紹不用庫(框架)自己寫ajax:本篇文章跟大家介紹不用庫(框架)自己寫ajax,感興趣的朋友一起學習吧平常會使用ajax來請求數據,加載一個庫(框架),或許僅僅maybe就使用了它的ajax部分。 寫個ajax,一來可以經歷一下處理問題的過程,提升技術能力,二來工作中有時真的用不著這么大的一個庫
推薦度:
導讀簡單介紹不用庫(框架)自己寫ajax:本篇文章跟大家介紹不用庫(框架)自己寫ajax,感興趣的朋友一起學習吧平常會使用ajax來請求數據,加載一個庫(框架),或許僅僅maybe就使用了它的ajax部分。 寫個ajax,一來可以經歷一下處理問題的過程,提升技術能力,二來工作中有時真的用不著這么大的一個庫
本篇文章跟大家介紹不用庫(框架)自己寫ajax,感興趣的朋友一起學習吧

平常會使用ajax來請求數據,加載一個庫(框架),或許僅僅maybe就使用了它的ajax部分。

  寫個ajax,一來可以經歷一下處理問題的過程,提升技術能力,二來工作中有時真的用不著這么大的一個庫(框架),用自己寫的,何樂不為呢。

  先來看看流行的jQuery是怎樣調用ajax的

  這樣的調用是不是很舒適、方便,如果感覺舒適那自己動手寫也參照這種設計方式,不用太復雜,滿足所需就好。

  先了解ajax的基礎知識

  XMLHttpRequest 對象

  XMLHttpRequest對象是ajax的核心,通過XMLHttpRequest對象來向服務器發異步請求,從服務器獲得數據,所有現代瀏覽器(IE7+、Firefox、Chrome、Safari、Opera)均支持 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject)。  

  創建一個兼容的XMLHttpRequest對象

var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

  向服務器發送請求

xhr.open(method,url,async);
//method:請求的類型;GET 或 POST
//url:請求的URL
//async:true(異步)或 false(同步)
xhr.send(string);
//將請求發送到服務器
//string:僅用于 POST 請求
//GET 比 POST 請求方式更簡單也更快,并且在大部分情況下都能用
//在以下情況中,請使用 POST 請求:
//無法使用緩存文件(更新服務器上的文件或數據庫)
//向服務器發送大量數據(POST 沒有數據量限制)
//發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

  服務器響應

  使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性獲得來自服務器的響應。

    如果來自服務器的響應是 XML,而且需要作為 XML 對象進行解析,請使用 responseXML 屬性。

    如果來自服務器的響應并非 XML,請使用 responseText 屬性,responseText 屬性返回字符串形式的響應。

  onreadystatechange 事件

  當請求被發送到服務器時,我們需要執行一些基于響應的任務。每當 readyState 改變時,就會觸發 onreadystatechange 事件。readyState 屬性存有 XMLHttpRequest 的狀態信息。

   XMLHttpRequest 對象的三個重要的屬性:

    onreadystatechange  //存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數

    readyState  //存有 XMLHttpRequest 的狀態, 從 0 到 4 發生變化     

0: 請求未初始化
1: 服務器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應已就緒

    status  //200: "OK", 404: 未找到頁面

  在 onreadystatechange 事件中,我們規定當服務器響應已做好被處理的準備時所執行的任務, 當 readyState等于4 且 status為200 時,表示響應已就緒。

  一個簡單的ajax請求如下:

  補充:1. 發送GET請求時可能得到的是緩存的結果,為了避免這種情況,可以向URL 添加一個唯一的 ID,時間戳。2. 如果需要像HTML表單那樣 POST 數據,使用 setRequestHeader() 來添加 HTTP 頭。然后在 send() 方法中發送數據。

  開始寫自己的ajax

  先寫一個基本的,定義好各種參數選項,供參考

  定義好了參數選項,來分析一下。其中 dataType 是整個ajax的重點,代碼的簡單或者復雜都在它了。

  在這里dataType為預期服務器返回的數據類型:xml, html, text, json, jsonp, script

  1. 為xml時,來自服務器的響應是XML,使用 responseXML 屬性獲取返回的數據

  2. 為html、text、json時,使用 responseText 屬性獲取返回的數據

      a. 為html時,返回純文本HTML信息,其中包含的script標簽是否要在插入dom時執行 ( 代碼復雜度+3 )

      b. 為json時, 返回JSON數據,要安全、要便捷、要兼容 ( 代碼復雜度+2 )

  3. 為jsonp時,一般跨域才用它,不用原來的ajax請求了,用創建script法( 代碼復雜度+2 )

  4. 為script時: 要跨域時,不用原來的ajax請求了,用創建script法( 代碼復雜度+1 ); 不跨域,返回純文本JavaScript代碼, 使用 responseText 屬性獲取返回的數據 ( 代碼復雜度+1 )

  其中,在html片段中的script標簽、jsonp、script,都要用到創建script標簽的方式。

  處理dataType為json

xhrdata = window.JSON && window.JSON.parse ? JSON.parse(xhr.responseText) : eval('(' + xhr.responseText + ')');

  這是最簡單的處理方式了,要JSON兼容,可以用json2.js。

  處理dataType為jsonp

  jsonp是要通過script標簽來請求跨域的,先了解下流程:

  這上圖中 a.html中請求了 http://www.b.com/b.php?callback=add (在ajax程序中請求url就是這個鏈接),在b.php中讀取了傳過來的參數 callback=add 根據獲取到的參數值(值為add),以JS語法生成了函數名,并把json數據作為參數傳入了這個函數,返回以JS語法生成的文檔給a.html,a.html解析并執行返回的JS文檔,調用了定義好的add函數。

  在程序中一般采用更通用的方式去調用,比如下面這個廣泛使用的loadJS函數:

  這樣把請求的url,傳入loadJS函數,得到一樣的結果。

loadJS('http://www.b.com/b.php?callback=add');

  因為是動態創建script,請求成功返回,JS代碼就立即執行,如果請求失敗是沒有任何提示的。因此自定義的參數選項: _opts.success 能調用,_opts.error不能調用。

  ajax處理jsonp也有兩種情況:

  1. 設置了請求URL后的參數 callback=add 特別是定義了函數名add,請求成功返回,JS代碼就立即執行(這里就是調用 add({"a":8,"b":2}) )

  2. 在_opts.success中處理JSON數據,就是請求成功返回,JS代碼不執行,并把函數中的參數挪出來,作為_opts.success的參數返回( 這里相當于處理字符串 'add({"a":8,"b":2})' ,去掉 'add(' 和 ‘)',得到 {"a":8,"b":2} )

  處理dataType為html

  如果不處理HTML片段中script標簽,直接把responseText返回值插入DOM樹就可以了。如果要處理script,就要把HTML片段中的script標簽找出來,對買個script單獨處理,并注意是script標簽中包含的JS代碼還是通過src請求的。

  處理dataType為script

  如果要跨域時,用創建script的方式,和處理jsonp類似; 不跨域,使用 responseText 屬性獲取返回的數據,可以用 eval 來讓代碼執行,也可以創建script來執行。

  到此ajax差不多分析完了,根據實際需要,添加各種功能,去思考每種功能是怎樣實現的,并能找到解決方法。

上面是我整理給大家的,希望今后會對大家有幫助。

相關文章:

MVC中基于Ajax和HTML5實現文件上傳功能

jquery與php結合實現AJAX長輪詢

初步了解JavaScript,Ajax,jQuery,并比較三者關系

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

簡單介紹不用庫(框架)自己寫ajax

簡單介紹不用庫(框架)自己寫ajax:本篇文章跟大家介紹不用庫(框架)自己寫ajax,感興趣的朋友一起學習吧平常會使用ajax來請求數據,加載一個庫(框架),或許僅僅maybe就使用了它的ajax部分。 寫個ajax,一來可以經歷一下處理問題的過程,提升技術能力,二來工作中有時真的用不著這么大的一個庫
推薦度:
標簽: 介紹 ajax 使用ajax
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 六十路垂乳熟年交尾正在播放 | 日本激情一区二区三区 | 国产成人高清亚洲一区久久 | 欧美成人福利 | 操日韩 | 国产一区二区三区视频 | 日韩精品网址 | 欧美一区二区三区视频在线观看 | 福利二区 | 天天躁日日躁狠狠躁中文字幕老牛 | 精品伊人久久大线蕉色首页 | 97久久精品午夜一区二区 | 国产成人青青热久免费精品 | 国产乱了真实在线观看 | 在线观看国产精品入口 | 欧美日韩欧美日韩 | 久久久网久久久久合久久久久 | 国产a国产片 | 国产国语在线播放视频 | 一区二区三区美女 | 国产成人久久精品一区二区三区 | 一级毛片一级毛片一级毛片 | 国产精品视频第一页 | 精品伊人久久大线蕉色首页 | 亚洲va国产va欧美va综合 | 久操视频免费在线观看 | 国产一区二区视频在线 | 国产l精品国产亚洲区在线观看 | 亚洲网站免费 | 欧美极品第1页专区 | 精品日韩欧美国产一区二区 | 国产欧美日韩第一页 | 国产中文字幕在线视频 | 国产精品视频一区二区三区 | 精品一区二区三区五区六区七区 | 亚洲国产精品日韩一线满 | 波多野氏免费一区 | 欧美另类图片亚洲偷 | 成人欧美精品久久久久影院 | 一本久久精品一区二区 | 夜夜操夜夜骑 |