非同步請求---XMLHttpRequest
今天學習非同步請求,有些問題和想法,記錄一下
說在前面的,非同步請求和同步請求的區別,同步請求在使用者發出請求的的之後,就只能等待,如果伺服器載入時間長,就等待時間長,在這個時間段無法做其他的動作,而非同步請求則規避了這個不足,它在發出請求之後,將請求首先交給了一箇中間物件,讓(XMLHttpRequest)也去向傳送同樣的請求,並把響應結果帶回來,而不用一直等待,可以做其他的動作。但是他們歸根都是請求,都是在向servlet傳送請求,所以伺服器端的工作差不都,只是在響應結果的部分,非同步請求不需要轉發和重定向而是直接out.print(),將資料放到輸出流中發給XMLHttpRequest物件,還有一點最大的區別是,非同步請求不會進行頁面的跳轉。
接下來說下使用非同步請求時伺服器和瀏覽器的各自負責的部分
一、伺服器
1.接受請求,獲取請求引數
2.業務處理(呼叫方法),一般是進行判斷
3.傳送資料(響應結果)
二、瀏覽器
由於非同步請求的物件XMLHttpRequest是JavaScript的內建物件,所以在瀏覽器端需要使用DOM程式設計以及JS函式,步驟不好理解,首先說下XMLHttpRequest物件的4大屬性,非同步請求的傳送業主要依靠這4個屬性來完成
1、readyState:包含伺服器響應處理的步驟,分0-4布,第4步表示響應正確返回
2、status:表示響應處理的結果,200:路徑正確,404:路徑不正確,500:伺服器內部錯誤異常
3、onreadystatechange:是JS中的一種函式型別,是在當readyState屬性發生變化的時候,被觸發而執行的一種函式
它的程式碼形式:xhr.onreadystatechange=function(){判斷readyState屬性和status屬性符合需求的條件限制;並根據條件判斷使用DOM程式設計進行頁面修改 }
4、responseText:包含響應處理結果的資料
四個屬性的使用方法:物件名.屬性名
下面說下瀏覽器執行非同步請求的步驟:
第一步,建立非同步請求物件,var xhr=new XMLHttpRequest()
第二步,事先宣告響應的而處理方,以防處理時間很快,提前宣告處理方式,這一點有些不理解,可能問題有些抽象?????
第三步,傳送非同步請求,用的兩個方法xhr.open("請求方式","servlet的url")和xhr.send()