B S模式(同步)AJAX技術(非同步)

2021-06-26 00:38:30 字數 3391 閱讀 5153

同步(synchronization),就是最常見的click-refresh模式,點乙個連線或提交乙個表單,然後整個頁面被重新整理.

非同步(asynchrony),當前很熱的ajax就是典型例子,提交請求返回物件是不可見的層,然後用js根據返回資料,改變當前頁面顯示,譬如google map....

get最為常見的http請求,普通上網瀏覽頁面就是get。get方式的引數請求直接跟在url後,以問號開始。(js中用window.location.search獲得)。引數可以用encodeuricomponent進行編碼,使用方式:

var enparam = encodeuricomponent(param);

url只支援大約2k的長度,即2048字元數;使用get進行ajax請求時候會快取導致出現的頁面不是正確的,一般方法加random引數值;ajax.send(null)。

同步與非同步:

ajax.open方法中,第3個引數是設同步或者非同步。prototype等js類庫一般都預設為非同步,即設為true。先說下同步的情況下,js會等待請求返回,獲取status。不需要onreadystatechange事件處理函式。而非同步則需要onreadystatechange事件處理,且值為4再正確處理下面的內容。

(注:文中的 ajax 表示xmlhttp請求物件。)

1//同步傳輸模式23

//非同步傳輸模式

總結:

get是向伺服器取資料的一種請求,而post是向伺服器提交資料的一種請求

get是獲取資訊,而不是修改資訊,類似資料庫查詢功能一樣,資料不會被修改

get請求的引數會跟在url後進行傳遞,請求的資料會附在url之後,以?號分割url和傳輸資料,引數之間以&號相連,%xx中的xx為該符號以16進製表示的ascii,如果資料是英文本母/數字,原樣傳送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用base64加密。

get傳輸的資料有大小限制,因為get是通過url提交資料,那麼get可提交的資料量就跟url的長度有直接關係了,不同的瀏覽器對url的長度的限制是不同的。

get請求的資料會被瀏覽器快取起來,使用者名稱和密碼將明文出現在url上,其他人可以查到歷史瀏覽記錄,資料不太安全。在伺服器端,用request.querystring來獲取get方式提交來的資料

post請求則作為http訊息的實際內容傳送給web伺服器,資料放置在html header內提交,post沒有限制提交的資料。post比get安全,當資料是中文或者不敏感的資料,則用get,因為使用get,引數會顯示在位址,對於敏感資料和不是中文字元的資料,則用post

post表示可能修改變伺服器上的資源的請求,在伺服器端,用post方式提交的資料只能用request.form來獲取

使用get方式提交的問題:

如何建立在大部分瀏覽器中都能執行的xmlhttprequest物件.

使用get請求時存在快取問題

中文亂碼問題

其中,第乙個問題,在《

xmlhttprequest 物件詳解

》一文中已經解決;

對於第二個問題,產生的原因是:

get請求會每次訪問快取,看其中是否有匹配的url,如果有,則返回快取中的url,如果沒有,則向伺服器發出請求.

解決方案:

1.在url上加個動態的變化引數,以求每次訪問的是不同的url,這樣每次都會向伺服器發出新的請求.

對於第三個問題,我們首先來看下產生亂碼的原因:

xmlhttp返回的資料預設是uft-8,如果客戶端頁面是gb2312或其他編碼,就會產生亂碼

解決方案:

1.若客戶端是gb2312,則在輸出時,指定輸出流編碼

2.客戶端和伺服器端都使用utf-8編碼

3.務必使用encodeuricomponent方法對引數進行編碼

使用post方式提交的問題:

1.使用post方式傳遞引數的用法:

瀏覽器會把各表單中欄位元素及其資料作為http訊息的實體內容傳送給web伺服器.

引數是隨著send方法傳送出去的,如send(data).

,伺服器端字符集設定採用request.setcharacterencoding("utf-8");語句。做到客戶端html編碼與伺服器端request.setcharacterencoding("utf-8");保持一致.伺服器端獲取引數時,需要使用request.form[data].

2.對於請求是key-value對的形式傳遞資料,可以採用post方式,對於複雜的引數可以考慮使用json或者xml方式傳遞。

4.選擇合適方法處理伺服器的響應。

ajax同步非同步

ajax 同步和非同步區別?我們在使用 ajax 一般都會使用非同步處理。非同步處理呢就是我們通過事件觸發到 ajax,請求伺服器,在這個期間無論伺服器有沒有響應,客戶端的其他 一樣可以執行。同步處理 我們通過實踐觸發 ajax,請求伺服器,在這個期間等待伺服器處理請求,在這個期間客戶端不能做任何處...

ajax同步非同步總結

ajax同步非同步 async false同步,預設是true非同步 同步的意思是當js 載入到當前ajax的時候會把頁面裡所有的 停止載入,頁面出現假死狀態,當這個ajax執行完畢後才會繼續執行其他 頁面假死狀態解除。而非同步則這個ajax 執行中的時候其他 一樣可以執行。例如 在寫datatab...

ajax同步和非同步

之前一直在寫jquery 的時候遇到ajax載入資料都需要考慮 執行順序問題。最近的專案用了到ajax同步。這個同步的意思是當js 載入到當前ajax的時候會把頁面裡所有的 停止載入,頁面出去假死狀態,當這個ajax執行完畢後才會繼續執行其他 頁面假死狀態解除。而非同步則這個ajax 執行中的時候其...