XMLHttpRequest (XHR)

XMLHttpRequest(XHR)的引入是Web平台的重大胜利。让我们看看它是如何工作的。 介紹 一個XHR請求的例子 附加的open()參數 onreadystatechange 中止XHR請求 與jQuery的比較 與Fetch的比較 跨網域請求 使用XHR上傳文件 介紹 在2000年代中期,網絡瀏覽器中引入XMLHttpRequest(XHR)是Web平台的重大突破。讓我們看看它是如何工作的。 許多現在看起來很正常的東西,在當時看起來就像來自未來。例如,我談論的GMail或Google Maps在很大程度上都依賴於XHR。 XHR是在九十年代由Microsoft發明的,由於所有瀏覽器在2002年至2006年期間都實現了它,它成為事實上的標准。W3C於2006年將XMLHttpRequest標准化。 就像在Web平台上有時會發生的情況一樣,最初有一些不一致之處,這使得在不同的瀏覽器中使用XHR變得非常不同。 像jQuery這樣的庫通過提供一個易於使用的抽象層,受到開發人員的歡迎,這反過來又幫助傳播了這項技術。 一個XHR請求的例子 以下代碼創建一個XMLHttpRequest(XHR)請求對象,並附加一個在onreadystatechange事件上響應的回調函數。 xhr連接的設置為向https://yoursite.com發送GET請求,並使用send()方法開始: const xhr = new XMLHttpRequest() xhr.onreadystatechange = () => { if (xhr.readyState === 4) { xhr.status === 200 ? console.log(xhr.responseText) : console.error('error') } } xhr.open('GET', 'https://yoursite.com') xhr.send() 附加的open()參數 在上面的例子中,我們只傳遞了方法和URL給請求。 我們還可以指定其他HTTP方法-(get,post,head,put,delete,options)。 其他參數讓您可以指定一個標誌,如果將其設置為false,則可以使請求同步進行,並為HTTP驗證指定一組憑據: open(method, url, asynchronous, username, password) onreadystatechange onreadystatechange在XHR請求期間多次被調用。我們明確忽略除readyState === 4以外的所有狀態,這意味著請求已完成。 狀態有: 1(OPENED):請求開始 2(HEADERS_RECEIVED):已接收到HTTP標頭 3(LOADING):響應開始下載 4(DONE):響應已下載 中止XHR請求 可以通過在xhr對象上調用abort()方法來中止XHR請求。 與jQuery的比較 在使用jQuery時,這些代碼可以轉寫為: $.get('https://yoursite.com', data => { console....