1. 程式人生 > >非同步請求---XMLHttpRequest

非同步請求---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()