面試之ajax原理(轉載)

總結1

總結2

AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創建交互式網頁應用的網頁開發技術,

是幾種原有技術的結合體。它由下列技術組合而成。

???1.使用CSS和XHTML來表示。

???2.?使用DOM模型來交互和動態顯示。

???3.使用XMLHttpRequest來和服務器進行異步通信。

???4.使用javascript來綁定和調用。

Ajax的原理簡單

Ajax的工作原理相當于在用戶和服務器之間加了—個中間層(AJAX引擎),使用戶操作與服務器響應異步化。并不是所有的用戶請求都提交給服務器,像—些數據驗證和數據處理等都交給Ajax引擎自己來做, 只有確定需要從服務器讀取新數據時再由Ajax引擎代為向服務器提交請求。

Ajax的原理簡單來說通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然后用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數據。要清楚這個過程和原理,我們必須對?XMLHttpRequest有所了解。

XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript可以及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

??所以我們先從XMLHttpRequest講起,來看看它的工作原理。

??首先,我們先來看看XMLHttpRequest這個對象的屬性。

??它的屬性有:

??onreadystatechange??每次狀態改變所觸發事件的事件處理程序。

??responseText?????從服務器進程返回數據的字符串形式。

??responseXML????從服務器進程返回的DOM兼容的文檔數據對象。

??status???????????從服務器返回的數字代碼,比如常見的404(未找到)和200(已就緒)

??status Text???????伴隨狀態碼的字符串信息

??readyState???????對象狀態值

0 (未初始化)?對象已建立,但是尚未初始化(尚未調用open方法)

1 (初始化)?對象已建立,尚未調用send方法

2 (發送數據) send方法已調用,但是當前的狀態及http頭未知

3 (數據傳送中)?已接收部分數據,因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤,

4 (完成)?數據接收完畢,此時可以通過通過responseXml和responseText獲取完整的回應數據

ajax的優點

???Ajax的給我們帶來的好處大家基本上都深有體會,在這里我只簡單的講幾點:

???1、最大的一點是頁面無刷新,在頁面內與服務器通信,給用戶的體驗非常好。

 ?2、使用異步方式與服務器通信,不需要打斷用戶的操作,具有更加迅速的響應能力。

 ?3、可以把以前一些服務器負擔的工作轉嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。并且減輕服務器的負擔,ajax的原則是“按需取數據”,可以最大程度的減少冗余請求,和響應對服務器造成的負擔。

??4、基于標準化的并被廣泛支持的技術,不需要下載插件或者小程序。

8、ajax的缺點

??下面我著重講一講ajax的缺陷,因為平時我們大多注意的都是ajax給我們所帶來的好處諸如用戶體驗的提升。而對ajax所帶來的缺陷有所忽視。

??下面所闡述的ajax的缺陷都是它先天所產生的。

???1、ajax干掉了back按鈕,即對瀏覽器后退機制的破壞。后退按鈕是一個標準的web站點的重要功能,但是它沒法和js進行很好的合作。這是ajax所帶來的一個比較嚴重的問題,因為用戶往往是希望能夠通過后退來取消前一次操作的。那么對于這個問題有沒有辦法?答案是肯定的,用過Gmail的知道,Gmail下面采用的ajax技術解決了這個問題,在Gmail下面是可以后退的,但是,它也并不能改變ajax的機制,它只是采用的一個比較笨但是有效的辦法,即用戶單擊后退按鈕訪問歷史記錄時,通過創建或使用一個隱藏的IFRAME來重現頁面上的變更。(例如,當用戶在Google Maps中單擊后退時,它在一個隱藏的IFRAME中進行搜索,然后將搜索結果反映到Ajax元素上,以便將應用程序狀態恢復到當時的狀態。)

但是,雖然說這個問題是可以解決的,但是它所帶來的開發成本是非常高的,和ajax框架所要求的快速開發是相背離的。這是ajax所帶來的一個非常嚴重的問題。

?2、安全問題

技術同時也對IT企業帶來了新的安全威脅,ajax技術就如同對企業數據建立了一個直接通道。這使得開發者在不經意間會暴露比以前更多的數據和服務器邏輯。ajax的邏輯可以對客戶端的安全掃描技術隱藏起來,允許黑客從遠端服務器上建立新的攻擊。還有ajax也難以避免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基于credentials的安全漏洞等。

??3、對搜索引擎的支持比較弱。

??4、破壞了程序的異常機制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax框架是會破壞程序的異常機制的。關于這個問題,我曾經在開發過程中遇到過,但是查了一下網上幾乎沒有相關的介紹。后來我自己做了一次試驗,分別采用ajax和傳統的form提交的模式來刪除一條數據……給我們的調試帶來了很大的困難。

?

轉載于:https://www.cnblogs.com/yhf286/p/4878351.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374335.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

優化方案電子版_關于小區分支道路整修設計方案的討論稿(No.2020121)

各位業主,大家好! 關于綠洲比華利花園主干道翻新和次干道整修前期勘查和設計方案,經業委會及小區專家小組、設計單位申都設計公司工程設計人員結合本小區的實際情況進行了深入討論,優化設計,形成如下三個獨立方案&…

OSGI和Spring動態模塊–簡單的Hello World

在此姿勢中,我們將采用使用OSGi進行的第一個實現,并使用Spring Dynamic Modules改進應用程序。 Spring動態模塊(Spring Dm)使基于OSGi的應用程序的開發更加容易。 這樣,服務的部署就容易得多。 您可以像其他任何Spring…

C語言代碼規范(五)函數參數個數

一個函數的參數的數目過多(尤其是超過8個)顯然是一種不可取的編程風格。參數的數目直接影響調用函數的速度,參數越多,調用函數越慢。 參數的數目少,程序就顯得精練、簡潔,這有助于檢查和發現程序中的錯誤。…

vijos P1740 聰明的質檢員

題目鏈接:傳送門 題目大意:給你n個物品,每件物品有重量 W 和價值 V,給m個區間,和一個標準值。(n,m最大200000) 要求找到一個值x,使得m個所有區間的權值和與標準值的差的絕對值最小。單個區間權值計算公式(數目num0,價值…

為什么有的開關電源需要加自舉電容?

一、什么是自舉電路? 1.1 自舉的概念 首先,自舉電路也叫升壓電路,是利用自舉升壓二極管,自舉升壓電容等電子元件,使電容放電電壓和電源電壓疊加,從而使電壓升高。有的電路升高的電壓能達到數倍電源電壓。…

VS2010報錯 error:LINK1123:轉換到COF期間失敗,文件無限或損壞

右鍵工程-配置屬性-清單工具-輸入和輸出,嵌入清單一項重新選擇為否,如下圖 修改后重新生成和運行,發現程序正常運行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末視頻講解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 開發中遇到的問題

1. 關于糾結很久的KVO崩潰問題&#xff0c;其真正原因是&#xff0c;在刪除roomItem的KVO之前,將這個對象已經賦值為nil,所以實際上并沒有刪除他的observer&#xff0c;因此而崩潰&#xff1b;長時間糾結的原因是受.cxx_destruct影響了思路 2.拷貝block 因為block變量默認是聲明…

為舊版代碼創建存根–測試技術6

任何閱讀此博客的人都可能已經意識到&#xff0c;目前我正在開發一個包含大量舊代碼的項目&#xff0c;這些舊代碼龐大&#xff0c;擴展且編寫時從未進行過任何測試。 在使用此遺留代碼時&#xff0c;有一個行為異常的類非常普遍&#xff0c;整個團隊都一次又一次地犯錯。 為了…

C學習雜記(一)常見誤會

一、sizeof是關鍵字&#xff0c;不是函數。 二、strlen是函數。

python性能解決_我們如何發現并解決Python代碼中性能下降的問題

Python部落(python.freelycode.com)組織翻譯&#xff0c;禁止轉載&#xff0c;歡迎轉發。 作者&#xff1a;Omer Lachish 最近&#xff0c;我們已經開始使用RQ庫代替Celery庫作為我們的任務運行引擎。第一階段&#xff0c;我們只遷移了那些不直接進行查詢工作的任務。這些任務包…

easyui $.parser.parse 頁面重新渲染

一些dom元素是動態拼接上的easui的樣式&#xff0c;由于頁面已經渲染過了&#xff0c;所以需要手動執行渲染某個部件或者整個頁面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6裝飾器:在注入時裝飾類

軟件中常見的設計模式是裝飾器模式 。 我們上一堂課&#xff0c;然后在它周圍包裝另一堂課。 這樣&#xff0c;當我們調用類時&#xff0c;我們總是在到達內部類之前經過周圍的類。 Java EE 6允許我們通過CDI創建裝飾器&#xff0c;作為其AOP功能的一部分。 如果我們想實現仍然…

C語言代碼規范(六)浮點型變量邏輯比較

無論是float還是double類型的變量&#xff0c;都有精度限制。所以一定要避免將浮點變量用""或"!"與數字比較&#xff0c;應該設法轉化成為">"或"<"形式。 不建議使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 強烈推薦的例…

圖靈機器人調用數據恢復_機器人也能撩妹?python程序員自制微信機器人,替他俘獲女神芳心...

機器人也有感情還記得王傳君飾演的《星語心愿之再愛》這部電影嗎&#xff1f;王傳君飾演的天才程序員“王鵬鵬”因工作原因不能陪伴照顧身在異地的女朋友“林亦男”&#xff0c;呆萌宅男“王鵬鵬”開發出一款以自己為原型的“王鵬鵬8.0”程序去陪伴異地戀的女友&#xff0c;后來…

Spark排錯與優化

一. 運維 1. Master掛掉,standby重啟也失效 Master默認使用512M內存&#xff0c;當集群中運行的任務特別多時&#xff0c;就會掛掉&#xff0c;原因是master會讀取每個task的event log日志去生成spark ui&#xff0c;內存不足自然會OOM&#xff0c;可以在master的運行日志中看到…

在MySQL上使用帶密碼的GlassFish JDBC安全性

我在該博客上最成功的文章之一是有關在GlassFish上使用基于表單的身份驗證來建立JDBC安全領域的文章 。 對這篇文章的一些評論使我意識到&#xff0c;要真正使它安全&#xff0c;應該做的還很多。 開箱即用的安全性 圖片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

mgo寫入安全機制

mgo寫入安全機制 mongo寫入安全mgo寫入安全mongo寫入安全 mongo本身也有一整套的寫入安全機制,但是在這篇的內容里只介紹一小部分相關部分.先放一個鏈接可以跳過本節不看直接看這個 鏈接. WriteConcern.NONE:沒有異常拋出WriteConcern.NORMAL:僅拋出網絡錯誤異常&#xff0c;沒…

C學習雜記(二)筆試題:不使用任何中間變量如何將a、b的值進行交換

常見的方法如下 void swap1(int *a, int *b) {int temp *a;*a *b;*b temp; } 不使用中間變量的方法 void swap2(int *a, int *b) {*a *a *b;*b *a - *b;*a *a - *b; } 這種方法是不可取的&#xff0c;因為ab和a-b的運算可能會導致數據溢出。 void swap3(int *a, in…

利用python進行數據分析_利用python進行數據分析復現(1)

&#xfeff;一直以來&#xff0c;都想學習python數據分析相關的知識&#xff0c;總是拖拖拉拉&#xff0c;包括這次這個分享也是。《利用python進行數據分析 第2版》是一次無意之間在簡書上看到的一個分享&#xff0c;我決定將很詳細。一直都想著可以復現一下。但總有理由&…