AJAX 概念 優勢 發展前景 工作原理 底層技術 狀態 缺點 框架

来源:http://www.cnblogs.com/billvvv/archive/2017/07/08/7135418.html
-Advertisement-
Play Games

1. 概念Ajax asynchronous JavaScript and XML , 非同步js和xml. 這種解釋已經過時了, 現在ajax就是, 允許瀏覽器和伺服器通信, 而無需刷新當前頁面的技術. 它本來是微軟的技術, 是Google 在 google earth、google suggest... ...


1. 概念

Ajax asynchronous JavaScript and XML , 非同步js和xml.

這種解釋已經過時了, 現在ajax就是, 允許瀏覽器和伺服器通信, 而無需刷新當前頁面的技術.

它本來是微軟的技術, 是Google 在 google earth、google suggest以及gmail等對ajax技術的廣泛應用,催生了ajax的流行。事實上google目前在ajax技術方面的領先是微軟所無法達到的

2. 發展前景

Gmail在收發郵件的時候已經和Outlook Express的功能幾乎沒有差別了,而且它不需要安裝客戶端程式。現有的瀏覽器還沒有一個能像PhotoShop等桌面程式那樣處理複雜的圖像。但是我們也不能忽視它帶來的影響和衝擊。

3. 優勢(提升用戶體驗)

用戶體驗打比方,如果現在你家裡所在的小區因 某種情況而面臨停水,現在有關部門公佈了兩種方案,一是完全停水8個小時,在這8個小時內完全停水,8個小時後恢復正常。二是不完全停水10 個小時,在這10個小時內水沒有完全斷,只是流量比原來小了很多,在10個小時後恢復正常流量,那麼,如果是你你會選擇哪種方式呢?顯然是後者。

非同步傳輸是面向字元的傳輸,它的單位是字元;而同步傳輸是面向比特的傳輸,它的單位是楨,它傳輸的時候要求接受方和發送方的時鐘是保持一致的。

非同步一般每個小組是一個8位字元,在每個小組的頭部和尾部都有一個開始位和一個停止位,它在傳送過程中接收方和發送方的時鐘不要求一致,也就是說,非同步發送方可以在任何時刻發送這些小組,而接收方並不知道它什麼時候到達。

每次非同步傳輸的信息都以一個起始位開頭,它通知接收方數據已經到達了,這就給了接收方響應、接收 和緩存數據比特的時間;在傳輸結束時,一個停止位表示該次傳輸信息的終止。停止位使信號重新變回1,該信號一直保持到下一個開始位到達。

同步傳輸的比特分組要大得多。它不是獨立地發送每個字元,每個字元都有自己的開始位和停止位,而是把它們組合起來一起發送。我們將這些組合稱為數據幀,或簡稱為幀。確保接收方的採樣速度和比特的到達速度保持一致,使收發雙方進入同步。

同步也有好處:同步傳輸通常要比非同步傳輸快速得多。接收方不必對每個字元進行開始和停止的操作。一旦檢測到幀同步字元,它就在接下來的數據到達時接收它們。另外,同步傳輸的開銷也比較少。

缺點:數據比特位越長,緩存數據所需要的緩衝區也越大,這就限制了一個幀的大小。另外,幀越大,它占據傳輸媒體的連續時間也越長。在極端的情況下,這將導致其他用戶等得太久。


4. 工作原理及賴以工作的底層技術

通過XmlHttpRequest對象來向伺服器發非同步請求,從伺服器獲得數據,然後用javascript來操作DOM而更新頁面。

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獲取完整的回應數據

5.缺點

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提交的模式來刪除一條數據……給我們的調試帶來了很大的困難。

     5、另外,像其他方面的一些問題,比如說違背了url和資源定位的初衷。例如,我給你一個url地址,如果採用了ajax技術,也許你在該url地址下麵看到的和我在這個url地址下看到的內容是不同的。這個和資源定位的初衷是相背離的。

     6、一些手持設備(如手機、PDA等)現在還不能很好的支持ajax,比如說我們在手機的瀏覽器上打開采用ajax技術的網站時,它目前是不支持的,當然,這個問題和我們沒太多關係。

6.ajax的幾種框架

目前我們採用的比較多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微軟的atlas框架。Ajax.dll和Ajaxpro.dll這兩個框架差別不大,而magicajax.dll只是封裝得更厲害一些,比如說它可以直接返回DataSet數據集,前面我們已經說過,ajax返回的都是字元串,magicajax只是對它進行了封裝而已。但是它的這個特點可以給我們帶來很大的方便,比如說我們的頁面有一個列表,而列表的數據是不斷變化的,那麼我們可以採用magicajax來處理,操作很簡單,添加magicajax之後,將要更新的列表控制項放在magicajax的控制項之內,然後在pageload裡面定義更新間隔的時間就ok了,atlas的原理和magicajax差不多。但是,需要註意的一個問題是,這幾種框架都只支持IE,沒有進行瀏覽器相容方面的處理,用反編譯工具察看他們的代碼就可以知道。

除了這幾種框架之外,我們平時用到的比較多的方式是自己創建xmlHttpRequest對象,這種方式和前面的幾種框架相比更具有靈活性。另外,在這裡還提一下aspnet2.0自帶的非同步回調介面,它和ajax一樣也可以實現局部的無刷新,但它的實現實際上也是基於xmlhttprequest對象的,另外也是只支持IE,當然這是微軟的一個競爭策略。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在上一篇博客中,我們通過xml配置文件進行實體類和表的映射,但是近兩年來有更多的項目對一些比較穩定的實體類使用了註解進行ORM映射,這樣使得編程更加簡潔、簡單。其實使用註解進行ORM映射和使用xml進行映射沒有太多的操作流程上的變化,主要步驟為:導包、編寫帶註解的實體類、編寫核心配置文件、編寫測試類 ...
  • 1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #python 5 #2017/7/6 21:29 6 #__author__='Administrator' 7 from sqlalchemy.ext.declar ...
  • 進行數據解析的理由不計其數,相關的工具和技巧也同樣如此。但是,當您需要用這些數據做一些新的事情時,即使有“合適的”工具可能也是不夠的。這一擔心對於異類數據源的集成同樣存在。用來做這項工作的合適工具遲早應該是一種編程語言。 Oracle 提供了一些非常強大的實用程式來載入、處理和卸載數據。SQL*Lo ...
  • SSH:[email protected]:unbelievableme/object-pool.git HTTPS:https://github.com/unbelievableme/object-pool.git 緩衝池 設計要點:包含三個隊列:空緩衝隊列(emq),裝滿輸入數據的輸入的隊列(inq) ...
  • 1.什麼是業務代碼? 直接用於實現用戶需求的代碼就是業務代碼,比如用戶需要查詢某個數據,那麼直接查詢資料庫,返回結果的代碼,就是業務代碼。 2.什麼是非業務代碼? 輔助業務代碼,一般可以脫離業務而存在的代碼,比如用戶查詢某個數據,接收用戶輸入可能出現中文亂碼,這時解決中文亂碼的代碼並不直接包含在用戶 ...
  • 1.什麼是高內聚? 內聚針對的是模塊內部關係,指的是模塊各構成要素間的聯繫,高內聚說明各構成要素間聯繫緊密。 2.高內聚的優點 各構成要素間聯繫緊密,說明各構成要素是實現模塊功能充分的存在,沒有某一個要素是實現功能不需要的,各要素都被充分地利用了起來,不僅使代碼簡潔,而且便於維護與復用。試想,假如某 ...
  • Hibernate工程項目創建基本步驟:導包(Hibernate依賴包、SQL驅動包)、編寫實體類、編寫ORM映射配置文件、編寫核心配置文件、編寫測試驅動。 項目工程代碼已經上傳到GitHub:https://github.com/wanyouxian/Hibernate 工程名:Hibernate ...
  • 今天遇到了一個連續賦值的經典案例,網友們給出的答案也是五花八門,看起來有些繁瑣,我也來說說自己的看法。 下麵就是這個經典案例: 我們先來看一下普通連續賦值,即:變數賦值的類型是數據類型值 一般來說,等號賦值的方向是從右至左,那麼上面的代碼等同於下麵這段代碼,那麼我們就用下麵這段代碼來解釋上面的代碼: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...