1. 程式人生 > >ajax 兼容問題、send的位置、Status Code狀態碼

ajax 兼容問題、send的位置、Status Code狀態碼

不存在 請求 發送 註意 span 哪裏 nload post 沒有

XMLHttpRequest在低版本IE下(除IE6),裏面的事件和屬性都有不同。比如 xhr.onload = function( ){ } 事件只有高版本才能使用。

但是所有版本都支持:xhr.onreadystatechange = function( ){ } :能夠監聽到請求的步驟。

onreadystatechange 能夠監聽到五步,每步都有對應的數字0-4,但是第0步監聽不到,最多只能監聽1-4,通過xhr.readyState拿到這些數字:

  0:請求未初始化

  1:服務器連接已建立

  2:請求已接收

  3:請求處理中

  4:請求已完成,且響應已就緒(雖然 readyState已經為4,但是接受的信息,不一定是成功的。看 Status Code

狀態碼)

  如果在同步(false)的情況下,低版本 IE 是按照正常的同步編程順序解析 1-4 。 在高版本下,看不到1-3的過程,直接走4 。

在執行1-4步的時候,每完成一次都會調用onreadystatechange,直到最後一步為4的時候,說明服務器已經有回應了。


xhr.send( ) 到底放在哪裏合適?

  如果是 onload ,放在 onload 的上面也行,下面也行。

  如果是 onreadystatechange ,那麽 send 放在事件的下面。

    原因:1.能夠多監聽一步

        2.低版本 IE 下如果把 send 放在事件的上面,並且在同步的時候,第4步監聽不到。

總結:(同步的時候 send 放在事件的下面,異步的時候 send 放哪裏都可以)

   如果 IE 低版本:

     1.創建ajax對象

     2.填寫地址

     3.等待 (onreadystatechange)

     4.發送 (send)

   高版本:

     1.創建ajax對象 (var xhr = new XMLHttpRequest)

     2.填寫地址 (xhr.open(‘get/post’,‘/ XXXX?xxx=’ + xxxx,默認:true / false))

     3.發送 (send)

     4.等待 (onload)

     5.拿到返回信息


Status Code 狀態碼 (在 Network 中找 / xhr.status)

  xhr.status => http 狀態碼

    200:客戶端成功接收到服務端的返回數據

    301:永久重定向,當前域名地址已經永久跳轉到另一個域名地址

    302:臨時重定向,。。。。。。

    304:加載緩存,

    307:臨時重定向,針對的是http傳輸協議,一開始http => https

    400:訪問參數錯誤

    401:沒有訪問權限

    404:請求地址【資源】不存在

    413:客戶端請求的文件超過服務端的最大承載的容量

    500:未知的服務端錯誤

    503:服務器超過最大的負荷

  註意:只要是5xx 都是服務端的問題。只要頁面的4xx 都是前端的問題。2xx、3xx說明請求成功的意思。

  

2018-12-07

ajax 兼容問題、send的位置、Status Code狀態碼