1. 程式人生 > >AJAX非同步原理與實現

AJAX非同步原理與實現

面試時問到了這個問題,說實話我還是不理解的,只是單單會使用。所以今天我看一下,自己瞭解下。

看了網上前輩們寫的資料,我自己總結歸納ajax的原理和流程如下:

1、AJAX建立非同步物件XMLHttpRequest

這個是ajax核心的物件,當然不是所有瀏覽器建立這個物件的方法是一致的。我們開發過程中一般建議使用chrome瀏覽器,在chrome中,XMLHttpRequest物件的建立方法直接

var xmlHttp=new XMLHttpRequest();即可。但是IE是特例,我們需要這樣var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");(這裡忽略低版本IE了,我相信再低不可能使用IE6以下吧),要在一個方法內完成物件建立需要try、catch(JS也是可以的)

2、操作XMLHttpRequest 物件

物件建立完成後當然是使用了。

(1)設定請求引數(請求方式,請求頁面的相對路徑,是否非同步)

(2)設定回撥函式,一個處理伺服器響應的函式,使用 onreadystatechange ,類似函式指標

(3)獲取非同步物件的readyState 屬性:該屬性存有伺服器響應的狀態資訊。每當 readyState 改變時,onreadystatechange 函式就會被執行。

(4)判斷響應報文的狀態,若為200說明伺服器正常執行並返回響應資料,

(5)讀取響應資料,可以通過 responseText 屬性來取回由伺服器返回的資料。

感覺好難記,一時間還是很難消化的。我們還是直接來看ajax怎麼寫吧

現在ajax我會的就兩種,一種就是原生的ajax,另一種就是jquery中提供的ajax,後者比前者更簡單。

第一種:

原生ajax,請求方式因為分為post和get等,為了統一,可以當引數傳入,不必分開處理,然後我們可以封裝這樣的一個方法,使用時直接呼叫

 1 function ajax_method(url,data,method,success) {
 2     // 建立非同步物件
 3     var ajax = new XMLHttpRequest();
 4 
 5     // get 跟post  需要分別寫不同的程式碼
 6     if (method=='get') {
7 // get請求 8 if (data) { 9 // 如果有值 10 url+='?'; 11 url+=data; 12 }else{ 13 14 } 15 // 設定 方法 以及 url 16 ajax.open(method,url); 17 18 // send即可 19 ajax.send(); 20 }else{ 21 // post請求 22 // post請求 url 是不需要改變 23 ajax.open(method,url); 24 25 // 需要設定請求報文 26 ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 27 28 // 判斷data send傳送資料 29 if (data) { 30 // 如果有值 從send傳送 31 ajax.send(data); 32 }else{ 33 // 木有值 直接傳送即可 34 ajax.send(); 35 } 36 } 37 38 // 註冊事件 39 ajax.onreadystatechange = function () { 40 // 在事件中 獲取資料 並修改介面顯示 41 if (ajax.readyState==4&&ajax.status==200) { 42 // console.log(ajax.responseText); 43 44 // 將 資料 讓 外面可以使用 45 // return ajax.responseText; 46 47 // 當 onreadystatechange 呼叫時 說明 資料回來了 48 // ajax.responseText; 49 50 // 如果說 外面可以傳入一個 function 作為引數 success 51 success(ajax.responseText); 52 } 53 } 54 55 }

第二種:

其實jquery中使用ajax也是有多種方式的,先看看不帶引數的:

 1 $(document).ready(function(){  
 2     $("button").click(function(){  
 3         $.ajax({url:"http://localhost:8080/lsd/getChildrenList.action",  
 4             success:function(result){  
 5           //處理返回資料12         }});  
13     });  
14 });  

其中第一個引數是請求的url,第二個引數是回撥用函式,json資料封裝在result,需要對result的json資料進行解析

如果想加入引數,則在url和回撥函式之間加入引數即可。

另外,jquery中提供post型別的ajax方法從伺服器載入資料

1 $('#send').click(function(){
2     $.post('jqRequest.jsp',{
3         num: $('#num').val()
4     },function(data){
5         $('#result').html('您選擇的數字' + $('#num').val() + '是' + data)
6     })
7 })

寫法上我覺得就是三種$.ajax()和$.post()和$.get(),至於引數不引數,按實際需要來就行

三者做個比較:

$.get $.post是簡單易用的高層實現,我們使用$.get $.post方法,jQuery會自動封裝呼叫底層的$.ajax。
$.get 只處理簡單的 GET 請求功能以取代複雜 $.ajax,請求成功時可呼叫回撥函式。不支援出錯時執行函式,否則必須使用$.ajax。
$.post 只處理 post請求功能以取代複雜 $.ajax 。請求成功時可呼叫回撥函式。不支援出錯時執行函式,否則必須使用$.ajax。
$.get("test.php", { name: "John", time: "2pm" } ) $.get方法在請求時會自動生成queryString提交給伺服器(name=John&time=2pm),
$.post方法提交的資料直接類似表單提交,提交的資料量比$.get更大。

這裡插一句:post和get提交的區別,面試也問了,回答的不是很全面。

1.post提交的資料量幾乎沒有限制,get提交有內容大小限制

2.get提交把引數加在url中,post提交不會

3.由於get提交把引數放入了url,所以大家都可以看到是比較不安全的,post比較安全

相關推薦

AJAX非同步原理實現

面試時問到了這個問題,說實話我還是不理解的,只是單單會使用。所以今天我看一下,自己瞭解下。 看了網上前輩們寫的資料,我自己總結歸納ajax的原理和流程如下: 1、AJAX建立非同步物件XMLHttpRequest 這個是ajax核心的物件,當然不是所有瀏覽器建立這個物件的方法是一致的。我們開發過程中一般建議使

【java專案實踐】詳解Ajax工作原理以及實現非同步驗證使用者名稱是否存在+原始碼下載(java版)

      一年前,從不知道Ajax是什麼,伴隨著不斷的積累,到現在經常使用,逐漸有了深入的認識。今天,如果想開發一個更加人性化,友好,無重新整理,互動性更強的網頁,那您的目標一定是Ajax。 介紹

Java 線程池的原理實現

控制 try 所在 使用 urn str waiting media .info 這幾天主要是狂看源程序,在彌補了一些曾經知識空白的同一時候,也學會了不少新的知識(比方 NIO)。或者稱為新技術吧。 線程池就是當中之中的一個,一提到線程。我們會想到曾經《操作系統》的

防盜鏈的基本原理實現

rec eal limit ole 站點 new exceptio stub text 1. 我的實現防盜鏈的做法,也是參考該位前輩的文章。基本原理就是就是一句話:通過判斷request請求頭的refer是否來源於本站。(當然請求頭是來自於客戶端的,是可偽造的,暫不在本文

最小二乘法多項式曲線擬合原理實現 zz

博客 del p s 並且 多項式 聯網 python mar 程序 概念 最小二乘法多項式曲線擬合,根據給定的m個點,並不要求這條曲線精確地經過這些點,而是曲線y=f(x)的近似曲線y= φ(x)。 原理 [原理部分由個人根據互聯網上的資料進行總結,希望對大

無限極分類原理實現(轉)

轉換 完成 外灘 獲得 意思 容易 set 導航 另一個   前言   無限極分類是我很久前學到知識,今天在做一個項目時,發現對其概念有點模糊,所以今天就來說說無限極分類。   首先來說說什麽是無限極分類。按照我的理解,就是對數據完成多次分類,如同一棵樹一樣,從根開始,

java監聽器的原理實現

來看 class copyto 圖片 http size stat 順序 方法 監聽器模型涉及以下三個對象,模型圖如下: (1)事件:用戶對組件的一個操作,稱之為一個事件 (2)事件源:發生事件的組件就是事件源 (3)事件監聽器(處理器):監聽並負責處理事件的方法 執行順序

Redis實現分布式鎖原理實現分析

數據表 防止 中一 csdn 訂單 not 產生 www 整體 一、關於分布式鎖 關於分布式鎖,可能絕大部分人都會或多或少涉及到。 我舉二個例子: 場景一:從前端界面發起一筆支付請求,如果前端沒有做防重處理,那麽可能在某一個時刻會有二筆一樣的單子同時到達系統後臺。 場

優先隊列原理實現

() 通過 size 大堆 默認 深入理解 -s 示例 完整 轉自:https://www.cnblogs.com/luoxn28/p/5616101.html 優先隊列是一種用來維護一組元素構成的結合S的數據結構,其中每個元素都有一個關鍵字key,元素之間的比較都是通過k

LVM原理實現過程

LVM原理與實現過程一、什麽是LVM 不管是使用傳統的MBR分區方式或者是GPT的分區方式,在最後數據量逐漸變大的過程中都會出現空間不足的情況,但是若是使用將此分區的數據全部遷移至一個更大空間的磁盤上的遷移時間也是不可想象的,為了解決這個問題,LVM就誕生了。LVM(Logical volume Manag

MapReduce原理實現

讀取 提交 hdf 撲克 datanode 分配 去掉 是否 跟著 課程鏈接:Hadoop大數據平臺架構與實踐--基礎篇 1.MapReduce原理 分而治之,一個大任務分成多個小的子任務(map),並行執行後,合並結果(reduce) 問題1:1000副撲克牌少哪一張牌(

單點登錄原理實現

授權 速度 restful contain ppi 靠譜 遠的 except 令牌 單點登錄原理與實現      關於單點登錄,在項目中用到的是對於cookie中設置的domain 為二級域名,這樣二級域名下的cookie都可以共享,將sessionId存儲在cookie中

數據加密--詳解 RSA加密算法 原理實現

pri mir 對稱加密 模運算 速度 探討 進制 成績 分析 RSA算法簡介 RSA是最流行的非對稱加密算法之一。也被稱為公鑰加密。它是由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在19

線上防雪崩利器——熔斷器設計原理實現

data 沒有 保障系統 狀態模式 熔斷器 data- 雪崩 form cimage 前言 這是一篇根據工作中遇到的問題總結出的最佳實踐。 上周六,我負責的業務在淩晨00-04點的支付全部失敗了。 結果一查,MD,晚上銀行維護,下遊支付系統沒有掛維護公告,在此期間一直請求維

AJAX工作原理缺點

網絡 set 情況下 javascrip XML .net type 技術分享 jin 1.概念:什麽是AJAXAJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創建交互式網頁

分頁技術原理實現之分頁的意義及方法(一)

轉載自https://www.jb51.net/article/86326.htm。 什麼是分頁技術  分頁,是一種將所有資料分段展示給使用者的技術.使用者每次看到的不是全部資料,而是其中的一部分,如果在其中沒有找到自習自己想要的內容,使用者可以通過制定頁碼或是翻頁的方式轉換可見內容,

Android系統硬體抽象層原理實現之WIFI

http://m.blog.csdn.net/linux_zkf/article/details/7492720 整個WIFIHAL實現都很簡單,都是對wpa_supplicant的操作和使用,如果需要自己實現 WIFI HAL可以參考wifi.c來實現wifi.h中所定義的

推薦系統-協同過濾原理實現

一、基本介紹 1. 推薦系統任務 推薦系統的任務就是聯絡使用者和資訊一方面幫助使用者發現對自己有價值的資訊,而另一方面讓資訊能夠展現在對它感興趣的使用者面前從而實現資訊消費者和資訊生產者的雙贏。 2. 與搜尋引擎比較 相同點:幫助使用者快速發現有用資訊的工具 不同點:和搜尋引擎不同的是推薦系統不

離散傅立葉變換(DFT)和快速傅立葉變換(FFT)原理實現

目錄 1、影象變換 2、離散傅立葉變換(Discrete Fourier Transform) 3、DFT性質 4、DFT與數字影象處理 5、FFT-快速傅立葉變換 6、DFT與FFT的演算法實現 1. 影象變換 — —數學領域中有很多種變換,如傅立葉變換、拉普拉斯變

DeepLearning(深度學習)原理實現

經過三年的狂刷理論,覺得是時候停下來做些有用的東西了,因此決定開博把他們寫下來,一是為了整理學過的理論,二是監督自己並和大家分享。先從DeepLearning談起吧,因為這個有一定的實用性(大家口頭傳的“和錢靠的很近”大笑),國內各個大牛也都談了不少,我儘量從其他方面解釋一下。