反向ajax怎么實現

本文小編為大家詳細介紹“反向ajax怎么實現”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“反向ajax怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

創(chuàng)新互聯公司專注于相城企業(yè)網站建設,響應式網站開發(fā),商城網站建設。相城網站建設公司,為相城等地區(qū)提供建站服務。全流程定制制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯公司專業(yè)和態(tài)度為您提供的服務

反向ajax是指客戶端不必從服務器獲取信息,服務器會把相關信息直接推送到客戶端。在一個標準的HTTP Ajax請求中,數據是發(fā)送給服務器端的,而反向Ajax可用某些特定的方式來模擬發(fā)出一個Ajax請求,讓服務器盡可能快地向客戶端發(fā)送事件。

本教程操作環(huán)境:windows7系統、javascript1.8.5版、Dell G3電腦。

ajax詳解


什么是ajax

ajax即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網頁應用的網頁開發(fā)技術。

通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

ajax的由來

該技術在1998年前后得到了應用。

允許客戶端腳本發(fā)送HTTP請求(XMLHTTP)的第一個組件由Outlook Web Access小組寫成。該組件原屬于微軟Exchange Server,并且迅速地成為了Internet Explorer 4.0[3]的一部分。部分觀察家認為,Outlook Web Access是第一個應用了Ajax技術的成功的商業(yè)應用程序,并成為包括Oddpost的網絡郵件產品在內的許多產品的領頭羊。

但是,真正使得Ajax被大眾所熟知卻是Google。

Google在它著名的交互應用程序中使用了異步通訊,如Google討論組、Google地圖、Google搜索建議、Gmail等。Ajax這個詞由《Ajax: A New Approach to Web Applications》一文所創(chuàng),該文的迅速流傳提高了人們使用該項技術的意識。另外,對Mozilla/Gecko的支持使得該技術走向成熟,變得更為易用。

ajax的原理

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

Ajax其核心有JavaScript、XmlHttpRequest、DOM對象組成,通過XmlHttpRequest對象來向服務器發(fā)異步請求,從服務器獲得數據,然后用JavaScript來操作DOM而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數據。

讓我們來了解這幾個對象:

1) XMLHTTPRequest對象

Ajax的一個最大的特點是無需刷新頁面便可向服務器傳輸或讀寫數據(又稱無刷新更新頁面),這一特點主要得益于XMLHTTP組件XMLHTTPRequest對象。

XMLHttpRequest 對象方法描述:

反向ajax怎么實現

XMLHttpRequest 對象屬性描述:

反向ajax怎么實現

2) JavaScript

前端最吊炸天的語言。

3) DOM Document Object Model

DOM是給HTML和XML文件使用的一組API。它提供了文件的結構表述,讓你可以改變其中的內容及可見物。其本質是建立網頁與Script或程序語言溝通的橋梁。所有WEB開發(fā)人員可操作及建立文件的屬性、方法及事件都以對象來展現(例如,document就代表“文件本身“這個對像,table對象則代表HTML的表格對象等等)。
這些對象可以由當今大多數的瀏覽器以Script來取用。一個用HTML或XHTML構建的網頁也可以看作是一組結構化的數據,這些數據被封在DOM(Document Object Model)中,DOM提供了網頁中各個對象的讀寫的支持。

4) XML

可擴展的標記語言(Extensible Markup Language)具有一種開放的、可擴展的、可自描述的語言結構,它已經成為網上數據和文檔傳輸的標準,用于其他應用程序交換數據 。

5) 綜合

Ajax引擎,實際上是一個比較復雜的JavaScript應用程序,用來處理用戶請求,讀寫服務器和更改DOM內容。

JavaScript的Ajax引擎讀取信息,并且互動地重寫DOM,這使網頁能無縫化重構,也就是在頁面已經下載完畢后改變頁面內容,這是我們一直在通過JavaScript和DOM在廣泛使用的方法,但要使網頁真正動態(tài)起來,不僅要內部的互動,還需要從外部獲取數據,在以前,我們是讓用戶來輸入數據并通過DOM來改變網頁內容的,但現在,XMLHTTPRequest,可以讓我們在不重載頁面的情況下讀寫服務器上的數據,使用戶的輸入達到最少。

Ajax使WEB中的界面與應用分離(也可以說是數據與呈現分離),而在以前兩者是沒有清晰的界限的,數據與呈現分離的分離,有利于分工合作、減少非技術人員對頁面的修改造成的WEB應用程序錯誤、提高效率、也更加適用于現在的發(fā)布系統。也可以把以前的一些服務器負擔的工作轉嫁到客戶端,利于客戶端閑置的處理能力來處理。

ajax的優(yōu)勢

傳統的Web應用交互是由用戶觸發(fā)一個HTTP請求到服務器,服務器對其進行處理后,再返回一個新的HTML頁到客戶端。

每當服務器處理客戶端提交的請求時,客戶都只能空閑等待,并且哪怕只是一次很小的交互、只需從服務器端得到很簡單的一個數據,都要返回一個完整的HTML頁,而用戶每次都要浪費時間和帶寬去重新讀取整個頁面。

這個做法浪費了許多帶寬,由于每次應用的交互都需要向服務器發(fā)送請求,應用的響應時間就依賴于服務器的響應時間。這導致了用戶界面的響應比本地應用慢得多。

與此不同,AJAX應用可以僅向服務器發(fā)送并取回必需的數據,它使用SOAP或其它一些基于XML的Web Service接口,并在客戶端采用JavaScript處理來自服務器的響應。

因為在服務器和瀏覽器之間交換的數據大量減少,結果我們就能看到響應更快的應用。同時很多的處理工作可以在發(fā)出請求的客戶端機器上完成,所以Web服務器的處理時間也減少了。

其實就一句話,老子不用刷整個頁面就能看到變化了,改變的更迅速了,客戶端分擔了服務器的工作,服務器壓力更小了。

反向ajax怎么實現

ajax的劣勢

數據、接口暴漏,安全性不太好。

反向ajax詳解


什么是反向ajax

反向 Ajax (Reverse Ajax) 本質上則是這樣的一種概念:能夠從服務器端向客戶端發(fā)送數據。在一個標準的 HTTP Ajax 請求中,數據是發(fā)送給服務器端的,反向 Ajax 可以某些特定的方式來模擬發(fā)出一個 Ajax 請求,這樣的話,服務器就可以盡可能快地向客戶端發(fā)送事件(低延遲通信)。

反向ajax實現方式

1. 輪詢 (Polling)

輪詢其實是一種最笨的實現反向ajax的方法:用javascript在客戶端定時發(fā)送ajax請求。

setInterval(function() { 
    $.getJSON('events', function(events) { 
        console.log(events); 
    }); 
}, 2000);

為了盡快地獲得服務器端事件,輪詢的間隔(兩次請求相隔的時間)必須盡可能地小。這樣做的缺點就十分明顯:如果間隔減小的話,客戶端瀏覽器就會發(fā)出更多的請求,這些請求中的許多都不會返回任何有用的數據,而這將會白白地浪費掉帶寬和處理資源。

2.PiggyBack(捎帶輪詢)

捎帶輪詢是一種比輪詢更加聰明的做法,因為它會刪除掉所有非必需的請求(沒有返回數據的那些)。

它是一種半主動的方式,也就是說還是由Browser主動發(fā)出請求,但是每次請求的響應中除了當次的響應之外,還會把上次請求以來已經發(fā)生的變化同時發(fā)給Browser。

也就是說,當次請求的更新會搭載到下一次請求的響應一并發(fā)回。這樣,在Browser的感覺就好像上一次請求又有了更新。但是這種感覺取決于Browser向Server發(fā)出請求的頻率。如果,第二次請求遲遲沒有發(fā)出,那么上一次的更新就不會取到。

3. Comet(服務器推)

這是一種基于 HTTP 長連接的“服務器推”技術。

實現方式主要有下面兩種:

1)HTTP 流(HTTP Streaming)

在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求或是采用xhr請求,服務器端就能源源不斷地往客戶端輸入數據。

優(yōu)點:消息即時到達,不發(fā)無用請求;管理起來也相對方便。

缺點:服務器維護一個長連接會增加開銷。

實例:Gmail聊天

<script type="text/javascript">
    $(function () {
        (function iframePolling() {
            var url = "${pageContext.request.contextPath}/communication/user/ajax.mvc?timed=" + new Date().getTime();
            var $iframe = $('<iframe id="frame" name="polling" style="display: none;" src="' + url + '"></iframe>');
            $("body").append($iframe);

            $iframe.load(function () {
                $("#logs").append("[data: " + $($iframe.get(0).contentDocument).find("body").text() + " ]<br/>");
                $iframe.remove();

                // 遞歸
                iframePolling();
            });
        })();    
    });
</script>

2)HTTP 長輪詢(HTTP Long Polling)

這種情況下,由客戶端向服務器端發(fā)出請求并打開一個連接。這個連接只有在收到服務器端的數據之后才會關閉。服務器端發(fā)送完數據之后,就立即關閉連接。客戶端則馬上再打開一個新的連接,等待下一次的數據。

優(yōu)點:在無消息的情況下不會頻繁的請求,耗費資源小。

缺點:服務器hold連接會消耗資源,返回數據順序無保證,難于管理維護。

實例:WebQQ、Hi網頁版、Facebook IM。

<script type="text/javascript">
            $(function () {

                (function longPolling() {

                    $.ajax({
                        url: "${pageContext.request.contextPath}/communication/user/ajax.mvc",
                        data: {"timed": new Date().getTime()},
                        dataType: "text",
                        timeout: 5000,
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $("#state").append("[state: " + textStatus + ", error: " + errorThrown + " ]<br/>");
                            if (textStatus == "timeout") { // 請求超時
                                    longPolling(); // 遞歸調用

                                // 其他錯誤,如網絡錯誤等
                                } else { 
                                    longPolling();
                                }
                            },
                        success: function (data, textStatus) {
                            $("#state").append("[state: " + textStatus + ", data: { " + data + "} ]<br/>");

                            if (textStatus == "success") { // 請求成功
                                longPolling();
                            }
                        }
                    });
                })();

            });
        </script>

讀到這里,這篇“反向ajax怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道。

網頁標題:反向ajax怎么實現
文章轉載:http://bm7419.com/article30/gigppo.html

成都網站建設公司_創(chuàng)新互聯,為您提供Google、服務器托管、手機網站建設、營銷型網站建設、面包屑導航網站改版

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都做網站