Web请求中同步与异步的区别
普通的B/S模式就是同步,而AJAX技術就是異步,當然XMLHttpReques有同步的選項。
同步:提交請求->等待服務器處理->處理完畢返回。這個期間客戶端瀏覽器不能干任何事。
異步: 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢。
舉個生動的例子吧:
同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
異步就是你叫我,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。
所以,要我請你吃飯就用同步的方法,要請我吃飯就用異步的方法,這樣你可以省錢。
再舉個例子,打電話時同步,發短信是異步。
ajax的open()方法
用法:open(http-method,url,async,userID,password)
后面是帳號和密碼,在禁止匿名訪問的http頁面中,需要用戶名和口令。
ajax.open方法中,第3個參數是設同步或者異步。prototype等js類庫一般都默認為異步,即設為true。 先說下同步的情況下,js會等待請求返回,獲取status。不需要onreadystatechange事件處理函數。 而異步則需要onreadystatechange事件處理,且值為4再正確處理下面的內容。
首先看看異步處理方式。
其中async是一個布爾值。如果是異步通信方式(true),客戶機就不等待服務器的響應;如果是同步方式(false),客戶機就要等到服務器返回消息后才去執行其他操作。我們需要根據實際需要來指定同步方式,在某些頁面中,可能會發出多個請求,甚至是有組織有計劃有隊形大規模的高強度的request,而后一個是會覆蓋前一個的,這個時候當然要指定同步方式:Flase。
請求方式
GET
最為常見的HTTP請求,普通上網瀏覽頁面就是GET。GET方式的參數請求直接跟在URL后,以問號開始。(JS中用window.location.search獲得)。參數可以用encodeURIComponent進行編碼,使用方式:
1 var EnParam = encodeURIComponent(param);- URL只支持大約2K的長度,即2048字符數;
- 使用GET進行AJAX請求時候會緩存導致出現的頁面不是正確的,一般方法加random參數值;
- ajax.send(null)。
POST
向服務器提交數據用到。
- 需要將form表單中的值先取出轉換成字符串,用&符號連接,(同GET傳參數一樣);
- 提交數據量2GB;
- 使用ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'),處理提交的字符串;
- ajax.send(strings),這個strings表示form中需要提交的內容,例如a=1&b=2類似這樣的字符串。
程序示例
同步傳輸模式:
1 function RequestByGet(nProducttemp,nCountrytemp) 2 { 3 var xmlhttp 4 if (window.XMLHttpRequest) 5 { 6 //isIE = false; 7 xmlhttp = new XMLHttpRequest(); 8 } 9 else if (window.ActiveXObject) 10 { 11 //isIE = true; 12 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 13 } 14 15 //Web page location. 16 var URL="http://www.baidu.com/; 17 xmlhttp.open("GET",URL, false); 18 //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS") 19 xmlhttp.send(null); 20 var result = xmlhttp.status; 21 22 //OK 23 if(result==200) 24 { 25 document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText; 26 } 27 xmlhttp = null; 28 }異步傳輸模式:
1 var xmlhttp 2 function RequestByGet(nProducttemp,nCountrytemp) 3 { 4 if (window.XMLHttpRequest) 5 { 6 //isIE = false; 7 xmlhttp = new XMLHttpRequest(); 8 } 9 else if (window.ActiveXObject) 10 { 11 //isIE = true; 12 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 13 } 14 15 //Web page location. 16 var URL="http://www.baidu.com/"; 17 xmlhttp.open("GET",URL, true); 18 xmlhttp.onreadystatechange = handleResponse; 19 //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8") 20 xmlhttp.send(null); 21 } 22 function handleResponse() 23 { 24 if(xmlhttp.readyState == 4 && xmlhttp.status==200) 25 { 26 document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText; 27 xmlhttp = null; 28 } 29 }原文鏈接:http://www.nowamagic.net/program/program_SynchronousAndAsynchronous.php
轉載于:https://www.cnblogs.com/wangweiabcd/p/3885989.html
總結
以上是生活随笔為你收集整理的Web请求中同步与异步的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判定点是否在不规则多边形内部的问题
- 下一篇: 旅途的意义- 献给二十五岁